├── LICENSE ├── examples ├── ex1.nim ├── ex10.nim ├── ex11.nim ├── ex2.nim ├── ex3.nim ├── ex4.nim ├── ex5.nim ├── ex6.nim ├── ex7.nim ├── ex8.nim ├── ex9.nim └── gtk_quartz_ex1.nim ├── gtk2.nimble ├── readme.markdown ├── src ├── atk.nim ├── gdk2.nim ├── gdk2pixbuf.nim ├── gdk2x.nim ├── gdkglext.nim ├── glib2.nim ├── gtk2.nim ├── gtkglext.nim ├── gtkhtml.nim ├── gtkmacintegration.nim ├── libglade2.nim ├── pango.nim └── pangoutils.nim └── tests ├── nim.cfg └── tmain.nim /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /examples/ex1.nim: -------------------------------------------------------------------------------- 1 | import 2 | glib2, gtk2 3 | 4 | proc destroy(widget: PWidget, data: Pgpointer) {.cdecl.} = 5 | main_quit() 6 | 7 | var 8 | window: PWidget 9 | nim_init() 10 | window = window_new(WINDOW_TOPLEVEL) 11 | discard signal_connect(window, "destroy", 12 | SIGNAL_FUNC(ex1.destroy), nil) 13 | show(window) 14 | main() 15 | -------------------------------------------------------------------------------- /examples/ex10.nim: -------------------------------------------------------------------------------- 1 | import 2 | gtk2, gdk2, cairo, glib2 3 | 4 | 5 | var 6 | gcount: int = 0 7 | gpos=[0,0] 8 | buttonPressed: bool 9 | 10 | proc expose_proc(widget: PWidget, event: PEventExpose): gboolean {.cdecl.} = 11 | let cr : PContext = widget.window.cairo_create() 12 | 13 | ### some texts 14 | cr.move_to(20, 110) 15 | cr.select_font_face("Arial",FONT_SLANT_NORMAL,FONT_WEIGHT_BOLD) 16 | cr.set_font_size(14.0) 17 | cr.show_text("Hello, cairo") 18 | cr.move_to(20, 130) 19 | cr.set_font_size(24.0) 20 | cr.show_text("Nim!") 21 | 22 | # a polyline 23 | cr.move_to(0,0) 24 | cr.line_to(100,100) 25 | cr.line_to(100,0) 26 | cr.line_to(0,100) 27 | cr.line_to(100,100) 28 | cr.stroke 29 | 30 | # some rectangles 31 | cr.rectangle(110, 10, 30,30) 32 | cr.stroke 33 | cr.rectangle(110, 50, 30,30) 34 | cr.fill 35 | 36 | # a polygone 37 | cr.translate(10,20) 38 | cr.move_to(100,100) 39 | cr.line_to(150,110) 40 | cr.line_to(200,100) 41 | cr.line_to(155,130) 42 | cr.line_to(100,100) 43 | cr.close_path 44 | cr.fill 45 | cr.translate(-10,-20) 46 | 47 | # arc 48 | cr.move_to(50,160) 49 | cr.arc(50,160,20,0.0, -3.1415/3.0) 50 | cr.close_path 51 | cr.stroke 52 | cr.arc(10,160,10,0.0, -3.1415/3.0) 53 | cr.close_path 54 | cr.fill 55 | 56 | # color/opacity fg/bg 57 | cr.set_source_rgba(1.0, 0.1, 0.1 , 1.0) 58 | cr.rectangle(110, 90, 30,30) 59 | cr.fill 60 | cr.set_source_rgba(0.0, 0.3, 0.8 , 0.5) 61 | cr.rectangle(120, 20, 40,30) 62 | cr.fill 63 | 64 | # animation : timer generate 65 | gcount=(gcount+1) %% 360 66 | cr.set_source_rgba(0.3, float(1+gcount)/360.0, 0.3 , 1.0) 67 | cr.move_to(90,51) 68 | cr.arc(90,51,8,0.0, (2*3.1415/360.0)*(float(gcount))) 69 | cr.close_path 70 | cr.stroke 71 | 72 | # show mouse position 73 | 74 | cr.set_source_rgba(1.0, 0.0, 0.1 , 1.0) 75 | cr.rectangle(float(gpos[0]-5), float(gpos[1]-5), 10.0,10.0) 76 | cr.fill 77 | 78 | # end expose event 79 | cr.destroy() 80 | result=false 81 | 82 | ########################### Callbacks 83 | 84 | proc click_proc(w: PWidget, ev: TEventButton): gboolean {.cdecl.} = 85 | echo("mouse-button press x=" & $ev.x & 86 | " y=" & $ev.y & " button=" & $ev.button & 87 | " state=" & $ev.state) 88 | gpos=[int(ev.x),int(ev.y)] 89 | buttonPressed=true 90 | 91 | proc motion_proc(widget: PWidget, ev: TEventButton): gboolean {.cdecl.} = 92 | if buttonPressed: 93 | echo("mouse-button motion x=" & $ev.x & 94 | " y=" & $ev.y & " button=" & $ev.button & 95 | " state=" & $ev.state) 96 | gpos=[int(ev.x),int(ev.y)] 97 | widget.queue_draw_area(0,0,200,200) 98 | 99 | proc release_proc(widget: PWidget, ev: TEventButton): gboolean {.cdecl.} = 100 | echo("mouse-button-release") 101 | buttonPressed=false 102 | 103 | 104 | proc mainnQuit(widget: PWidget, data: Pgpointer) {.cdecl.} = 105 | echo("quit") 106 | main_quit() 107 | 108 | #################################################### 109 | ## M a i n 110 | #################################################### 111 | 112 | nim_init() 113 | let win = window_new(gtk2.WINDOW_TOPLEVEL) 114 | let content = vbox_new(true,10) 115 | win.set_title("Gtk: " & " essai") 116 | win.set_default_size(200,200) 117 | 118 | ########### DrawingArea 119 | 120 | let cv= drawing_area_new() 121 | add_events(PWIDGET(cv),gint(EXPOSURE_MASK + BUTTON_PRESS_MASK + 122 | POINTER_MOTION_MASK + BUTTON_RELEASE_MASK + KEY_PRESS_MASK)) 123 | 124 | discard signal_connect(cv,"expose-event" ,SIGNAL_FUNC(exposeProc), nil) 125 | discard signal_connect(cv,"button-press-event" ,SIGNAL_FUNC(click_proc), nil) 126 | discard signal_connect(cv,"motion-notify-event" ,SIGNAL_FUNC(motion_proc),nil) 127 | discard signal_connect(cv,"button-release-event",SIGNAL_FUNC(release_proc),nil) 128 | 129 | cv.set_size_request(200, 200) 130 | content.add( cv ) 131 | 132 | proc timer_proc() = cv.queue_draw_area(0,0,200,200) 133 | 134 | discard g_timeout_add(50, timer_proc, nil) 135 | 136 | win.add(content) 137 | win.show_all() 138 | discard signal_connect(win, "destroy", SIGNAL_FUNC(mainnQuit), win) 139 | main() 140 | 141 | 142 | 143 | -------------------------------------------------------------------------------- /examples/ex11.nim: -------------------------------------------------------------------------------- 1 | #[ 2 | adapted from https://github.com/nim-lang/Nim/issues/5685 3 | ]# 4 | 5 | import gtk2 6 | 7 | var 8 | win = windowNew WINDOW_TOPLEVEL 9 | button = buttonNew "Click me" 10 | label = labelNew "There have been no clicks yet" 11 | vbox = vboxNew(true, 1) 12 | counter = 0 13 | 14 | proc clickedMe(o: var PButton, l: PLabel) = 15 | inc counter 16 | l.setText "You clicked me " & $counter & " times" 17 | 18 | nim_init() 19 | win.setTitle "Click me" 20 | vbox.add label 21 | vbox.add button 22 | win.add vbox 23 | discard win.signal_connect("delete-event", SignalFunc mainQuit, nil) 24 | discard button.signal_connect("clicked", SignalFunc clickedMe, label) 25 | win.showAll() 26 | 27 | main() 28 | -------------------------------------------------------------------------------- /examples/ex2.nim: -------------------------------------------------------------------------------- 1 | 2 | import 3 | glib2, gtk2 4 | 5 | proc destroy(widget: PWidget, data: Pgpointer){.cdecl.} = 6 | main_quit() 7 | 8 | var 9 | window: PWidget 10 | button: PWidget 11 | 12 | nim_init() 13 | window = window_new(WINDOW_TOPLEVEL) 14 | button = button_new("Click me") 15 | set_border_width(PContainer(window), 5) 16 | add(PContainer(window), button) 17 | discard signal_connect(window, "destroy", 18 | SIGNAL_FUNC(ex2.destroy), nil) 19 | show(button) 20 | show(window) 21 | main() 22 | 23 | -------------------------------------------------------------------------------- /examples/ex3.nim: -------------------------------------------------------------------------------- 1 | 2 | import 3 | glib2, gtk2 4 | 5 | proc newbutton(ALabel: cstring): PWidget = 6 | result = button_new(ALabel) 7 | show(result) 8 | 9 | proc destroy(widget: PWidget, data: Pgpointer){.cdecl.} = 10 | main_quit() 11 | 12 | nim_init() 13 | ### This is where the settings are happening for the boxes within the window ### 14 | 15 | var window = window_new(WINDOW_TOPLEVEL) # Box to divide window in 2 halves: 16 | var totalbox = vbox_new(true, 10) 17 | show(totalbox) # A box for each half of the screen: 18 | var hbox = hbox_new(false, 5) 19 | show(hbox) 20 | var vbox = vbox_new(true, 5) 21 | show(vbox) # Put boxes in their halves 22 | pack_start(totalbox, hbox, true, true, 0) 23 | pack_start(totalbox, vbox, true, true, 0) # Now fill boxes with buttons. 24 | 25 | ### This is where the settings part ends ### 26 | 27 | pack_start(hbox, newbutton("Button 1"), false, false, 0) 28 | pack_start(hbox, newbutton("Button 2"), false, false, 0) 29 | pack_start(hbox, newbutton("Button 3"), false, false, 0) # Vertical box 30 | pack_start(vbox, newbutton("Button A"), true, true, 0) 31 | pack_start(vbox, newbutton("Button B"), true, true, 0) 32 | pack_start(vbox, newbutton("Button C"), true, true, 0) # Put totalbox in window 33 | set_border_width(PCONTAINER(window), 5) 34 | add(PContainer(window), totalbox) 35 | discard signal_connect(window, "destroy", SIGNAL_FUNC(ex3.destroy), nil) 36 | show(window) 37 | main() 38 | 39 | -------------------------------------------------------------------------------- /examples/ex4.nim: -------------------------------------------------------------------------------- 1 | 2 | import 3 | glib2, gtk2 4 | 5 | proc newbutton(ALabel: cstring): PWidget = 6 | result = button_new(ALabel) 7 | show(result) 8 | 9 | proc destroy(widget: PWidget, data: Pgpointer){.cdecl.} = 10 | main_quit() 11 | 12 | nim_init() 13 | var window = window_new(WINDOW_TOPLEVEL) 14 | var maintable = table_new(6, 6, true) 15 | 16 | proc AddToTable(Widget: PWidget, Left, Right, Top, Bottom: guint) = 17 | attach_defaults(mainTable, Widget, Left, Right, Top, Bottom) 18 | 19 | show(mainTable) 20 | AddToTable(newbutton("1,1 At 1,1"), 1, 2, 1, 2) 21 | AddToTable(newbutton("2,2 At 3,1"), 3, 5, 1, 3) 22 | AddToTable(newbutton("4,1 At 4,1"), 1, 5, 4, 5) # Put all in window 23 | set_border_width(window, 5) 24 | add(window, maintable) 25 | discard signal_connect(window, "destroy", 26 | SignalFunc(ex4.destroy), nil) 27 | show(window) 28 | main() 29 | 30 | -------------------------------------------------------------------------------- /examples/ex5.nim: -------------------------------------------------------------------------------- 1 | 2 | import 3 | glib2, gtk2 4 | 5 | proc destroy(widget: PWidget, data: Pgpointer){.cdecl.} = 6 | main_quit() 7 | 8 | # This function is used to close the window when clicking on the "Click me" button. 9 | proc widgetDestroy(w: PWidget) {.cdecl.} = 10 | destroy(w) 11 | 12 | nim_init() 13 | var window = window_new(WINDOW_TOPLEVEL) 14 | var button = button_new("Click me") 15 | set_border_width(window, 5) 16 | add(window, button) 17 | discard signal_connect(window, "destroy", 18 | SIGNAL_FUNC(ex5.destroy), nil) 19 | discard signal_connect_object(button, "clicked", 20 | SIGNAL_FUNC(widgetDestroy), 21 | window) 22 | show(button) 23 | show(window) 24 | main() 25 | 26 | -------------------------------------------------------------------------------- /examples/ex6.nim: -------------------------------------------------------------------------------- 1 | 2 | import 3 | glib2, gtk2 4 | 5 | type 6 | TButtonSignalState = object 7 | obj: gtk2.Pobject 8 | signalID: int32 9 | disable: bool 10 | 11 | PButtonSignalState = ptr TButtonSignalState 12 | 13 | proc destroy(widget: PWidget, data: Pgpointer){.cdecl.} = 14 | main_quit() 15 | 16 | # This function is used to close the window when clicking on the "Click me" button. 17 | proc widgetDestroy(w: PWidget) {.cdecl.} = destroy(w) 18 | 19 | proc disablesignal(widget: PWidget, data: Pgpointer){.cdecl.} = 20 | var s = cast[PButtonSignalState](data) 21 | if s.disable: 22 | signal_handler_block(s.obj, s.signalID.culong) 23 | else: 24 | signal_handler_unblock(s.obj, s.signalID.gulong) 25 | s.disable = not s.disable 26 | 27 | var 28 | quitState: TButtonSignalState 29 | 30 | nim_init() 31 | var window = window_new(WINDOW_TOPLEVEL) 32 | var quitbutton = button_new("Quit program") 33 | var disablebutton = button_new("Disable button") 34 | var windowbox = vbox_new(true, 10) 35 | pack_start(windowbox, disablebutton, true, false, 0) 36 | pack_start(windowbox, quitbutton, true, false, 0) 37 | set_border_width(window, 10) 38 | add(window, windowbox) 39 | discard signal_connect(window, "destroy", SIGNAL_FUNC(ex6.destroy), nil) 40 | quitState.obj = quitbutton 41 | quitState.signalID = signal_connect_object(quitState.obj, "clicked", 42 | SIGNAL_FUNC(widgetDestroy), window).int32 43 | quitState.disable = true 44 | discard signal_connect(disablebutton, "clicked", 45 | SIGNAL_FUNC(disablesignal), addr(quitState)) 46 | show(quitbutton) 47 | show(disablebutton) 48 | show(windowbox) 49 | show(window) 50 | main() 51 | 52 | -------------------------------------------------------------------------------- /examples/ex7.nim: -------------------------------------------------------------------------------- 1 | 2 | import 3 | gdk2, glib2, gtk2 4 | 5 | proc destroy(widget: PWidget, data: Pgpointer){.cdecl.} = 6 | main_quit() 7 | 8 | const 9 | inside: cstring = "Mouse is over label" 10 | outside: cstring = "Mouse is not over label" 11 | 12 | var 13 | overLabel: bool 14 | 15 | nim_init() 16 | var window = window_new(gtk2.WINDOW_TOPLEVEL) 17 | var stackbox = vbox_new(true, 10) 18 | var box1 = event_box_new() 19 | var label1 = label_new("Move mouse over label") 20 | add(box1, label1) 21 | var box2 = event_box_new() 22 | var label2 = label_new(outside) 23 | add(box2, label2) 24 | pack_start(stackbox, box1, true, true, 0) 25 | pack_start(stackbox, box2, true, true, 0) 26 | set_border_width(window, 5) 27 | add(window, stackbox) 28 | discard signal_connect(window, "destroy", 29 | SIGNAL_FUNC(ex7.destroy), nil) 30 | overlabel = false 31 | 32 | 33 | proc changeLabel(P: PWidget, event: gdk2.PEventCrossing, 34 | data: var bool){.cdecl.} = 35 | if not data: set_text(label1, inside) 36 | else: set_text(label2, outside) 37 | data = not data 38 | 39 | 40 | discard signal_connect(box1, "enter_notify_event", 41 | SIGNAL_FUNC(changeLabel), addr(overlabel)) 42 | discard signal_connect(box1, "leave_notify_event", 43 | SIGNAL_FUNC(changeLabel), addr(overlabel)) 44 | show_all(window) 45 | main() 46 | 47 | -------------------------------------------------------------------------------- /examples/ex8.nim: -------------------------------------------------------------------------------- 1 | 2 | import 3 | glib2, gtk2 4 | 5 | proc destroy(widget: PWidget, data: Pgpointer){.cdecl.} = 6 | main_quit() 7 | 8 | nim_init() 9 | var window = window_new(WINDOW_TOPLEVEL) 10 | var stackbox = vbox_new(true, 10) 11 | var label1 = label_new("Red label text") 12 | var labelstyle = copy(get_style(label1)) 13 | labelStyle.fg[STATE_NORMAL].pixel = 0 14 | labelStyle.fg[STATE_NORMAL].red = uint16.high 15 | labelStyle.fg[STATE_NORMAL].blue = 0 16 | labelStyle.fg[STATE_NORMAL].green = 0 17 | set_style(label1, labelstyle) 18 | # Uncomment this to see the effect of setting the default style. 19 | # set_default_style(labelstyle) # xxx would give CT error 20 | var label2 = label_new("Black label text") 21 | pack_start(stackbox, label1, true, true, 0) 22 | pack_start(stackbox, label2, true, true, 0) 23 | set_border_width(window, 5) 24 | add(window, stackbox) 25 | discard signal_connect(window, "destroy", 26 | SIGNAL_FUNC(ex8.destroy), nil) 27 | show_all(window) 28 | main() 29 | 30 | -------------------------------------------------------------------------------- /examples/ex9.nim: -------------------------------------------------------------------------------- 1 | 2 | import 3 | gdk2, glib2, gtk2 4 | 5 | proc destroy(widget: PWidget, data: Pgpointer){.cdecl.} = 6 | main_quit() 7 | 8 | const 9 | inside: cstring = "Mouse is over label" 10 | outside: cstring = "Mouse is not over label" 11 | 12 | var 13 | overButton: bool 14 | 15 | nim_init() 16 | var window = window_new(gtk2.WINDOW_TOPLEVEL) 17 | var stackbox = vbox_new(true, 10) 18 | var button1 = button_new("Move mouse over button") 19 | var buttonStyle = copy(get_style(button1)) 20 | buttonStyle.bg[STATE_PRELIGHT].pixel = 0 21 | buttonStyle.bg[STATE_PRELIGHT].red = uint16.high 22 | buttonStyle.bg[STATE_PRELIGHT].blue = 0 23 | buttonStyle.bg[STATE_PRELIGHT].green = 0 24 | set_style(button1, buttonstyle) # TODO: BUG doesn't work 25 | var button2 = button_new() 26 | var aLabel = label_new(outside) 27 | 28 | 29 | proc changeLabel(P: PWidget, event: gdk2.PEventCrossing, 30 | data: var bool){.cdecl.} = 31 | if not data: set_text(aLabel, inside) 32 | else: set_text(aLabel, outside) 33 | data = not data 34 | 35 | 36 | add(button2, aLabel) 37 | pack_start(stackbox, button1, true, true, 0) 38 | pack_start(stackbox, button2, true, true, 0) 39 | set_border_width(window, 5) 40 | add(window, stackbox) 41 | discard signal_connect(window, "destroy", 42 | SIGNAL_FUNC(ex9.destroy), nil) 43 | overButton = false 44 | discard signal_connect(button1, "enter_notify_event", 45 | SIGNAL_FUNC(changeLabel), addr(overButton)) 46 | discard signal_connect(button1, "leave_notify_event", 47 | SIGNAL_FUNC(changeLabel), addr(overButton)) 48 | show_all(window) 49 | main() 50 | -------------------------------------------------------------------------------- /examples/gtk_quartz_ex1.nim: -------------------------------------------------------------------------------- 1 | # This example shows how to use the GTK-Quartz Mac integration. 2 | # Only compiles on OSX, obviously. Use -d:gtk_quartz when compiling. 3 | 4 | import 5 | glib2, gtk2, gtkmacintegration, os 6 | 7 | proc destroy(widget: PWidget, data: Pgpointer) {.cdecl.} = 8 | main_quit() 9 | 10 | var 11 | application: POSXApplication 12 | window: PWidget 13 | nim_init() 14 | 15 | # OSX application initialization 16 | application = POSXApplication(g_object_new(get_type(), nil)) 17 | var menubar = menu_bar_new() 18 | var filemenu = menu_new() 19 | var about = menu_item_new("About") 20 | var separator = separator_menu_item_new() 21 | var prefs = menu_item_new("Preferences") 22 | var file = menu_item_new("File") 23 | var filenew = menu_item_new("New") 24 | file.set_submenu(filemenu) 25 | filemenu.append(filenew) 26 | menubar.append(file) 27 | application.set_menu_bar(menubar) 28 | menubar.show_all() 29 | application.insert_app_menu_item(about, 0) 30 | application.insert_app_menu_item(separator, 1) 31 | application.insert_app_menu_item(prefs, 2) 32 | ready(application) 33 | 34 | # Window initialization 35 | proc do_info_attention_request() {.cdecl.} = 36 | os.sleep(1000) 37 | discard application.attention_request(INFO_REQUEST) 38 | 39 | proc do_critical_attention_request() {.cdecl.} = 40 | os.sleep(1000) 41 | discard application.attention_request(CRITICAL_REQUEST) 42 | 43 | var button_attention_info = button_new("Info") 44 | var button_attention_critical = button_new("Critical") 45 | var hbox = hbox_new(true, 10) 46 | hbox.pack_start(button_attention_info, false, false, 10) 47 | hbox.pack_end(button_attention_critical, false, false, 10) 48 | var vbox = vbox_new(true, 10) 49 | var label = label_new(""" 50 | Attention requests only work if the application doesn't 51 | have focus. To test them, click a button and change the focus elsewhere within 52 | one second.""") 53 | vbox.pack_start(label, false, false, 5) 54 | vbox.pack_end(hbox, false, false, 10) 55 | window = window_new(WINDOW_TOPLEVEL) 56 | PContainer(window).add(vbox) 57 | discard signal_connect_object(button_attention_info, "clicked", 58 | SIGNAL_FUNC(gtk_quartz_ex1.do_info_attention_request), 59 | window) 60 | discard signal_connect_object(button_attention_critical, "clicked", 61 | SIGNAL_FUNC(gtk_quartz_ex1.do_critical_attention_request), 62 | window) 63 | discard signal_connect(window, "destroy", 64 | SIGNAL_FUNC(gtk_quartz_ex1.destroy), nil) 65 | window.show_all() 66 | main() 67 | -------------------------------------------------------------------------------- /gtk2.nimble: -------------------------------------------------------------------------------- 1 | version = "1.4" 2 | author = "Nim developers" 3 | description = "Wrapper for gtk2, a feature rich toolkit for creating graphical user interfaces." 4 | license = "MIT" 5 | srcDir = "src" 6 | 7 | requires "nim > 0.9.2, cairo" 8 | 9 | import std/distros 10 | foreignDep "gtk+" 11 | -------------------------------------------------------------------------------- /readme.markdown: -------------------------------------------------------------------------------- 1 | 2 | # Installation 3 | 4 | You can install this wrapper using the [Nimble](https://github.com/nimrod-code/nimble) package manager. 5 | 6 | ```bash 7 | nimble install gtk2 # To install latest tagged version from git, if one exists. 8 | nimble install gtk2#head # To install GIT HEAD. 9 | ``` 10 | 11 | # Use this wrapper as part of your nimble package 12 | 13 | If you wish to add this wrapper as a dependency to your nimble package then add the following to your .nimble file. 14 | 15 | ```ini 16 | [Deps] 17 | Requires = "gtk2#head" 18 | ``` 19 | 20 | # Notes 21 | 22 | ## OSX 23 | 24 | As of version 1.1 this binding will use [GTK-Quartz][1] if it is available, 25 | otherwise it will fallback to the X11 version of GTK. 26 | 27 | [1]: https://wiki.gnome.org/action/show/Projects/GTK+/OSX 28 | -------------------------------------------------------------------------------- /src/gdk2pixbuf.nim: -------------------------------------------------------------------------------- 1 | {.deadCodeElim: on.} 2 | {.push gcsafe.} 3 | import 4 | glib2 5 | 6 | when defined(win32): 7 | const 8 | pixbuflib = "libgdk_pixbuf-2.0-0.dll" 9 | elif defined(macosx): 10 | const 11 | pixbuflib = "libgdk_pixbuf-2.0.0.dylib" 12 | # linklib gtk-x11-2.0 13 | # linklib gdk-x11-2.0 14 | # linklib pango-1.0.0 15 | # linklib glib-2.0.0 16 | # linklib gobject-2.0.0 17 | # linklib gdk_pixbuf-2.0.0 18 | # linklib atk-1.0.0 19 | else: 20 | const 21 | pixbuflib = "libgdk_pixbuf-2.0.so" 22 | type 23 | PPixbuf* = pointer 24 | TPixbufAnimation = object 25 | PPixbufAnimation* = ptr TPixbufAnimation 26 | TPixbufAnimationIter = object 27 | PPixbufAnimationIter* = ptr TPixbufAnimationIter 28 | PPixbufAlphaMode* = ptr TPixbufAlphaMode 29 | TPixbufAlphaMode* = enum 30 | PIXBUF_ALPHA_BILEVEL, PIXBUF_ALPHA_FULL 31 | PColorspace* = ptr TColorspace 32 | TColorspace* = enum 33 | COLORSPACE_RGB 34 | TPixbufDestroyNotify* = proc (pixels: Pguchar, data: gpointer){.cdecl.} 35 | PPixbufError* = ptr TPixbufError 36 | TPixbufError* = enum 37 | PIXBUF_ERROR_CORRUPT_IMAGE, PIXBUF_ERROR_INSUFFICIENT_MEMORY, 38 | PIXBUF_ERROR_BAD_OPTION, PIXBUF_ERROR_UNKNOWN_TYPE, 39 | PIXBUF_ERROR_UNSUPPORTED_OPERATION, PIXBUF_ERROR_FAILED 40 | PInterpType* = ptr TInterpType 41 | TInterpType* = enum 42 | INTERP_NEAREST, INTERP_TILES, INTERP_BILINEAR, INTERP_HYPER 43 | 44 | proc TYPE_PIXBUF*(): GType 45 | proc PIXBUF*(anObject: pointer): PPixbuf 46 | proc IS_PIXBUF*(anObject: pointer): bool 47 | proc TYPE_PIXBUF_ANIMATION*(): GType 48 | proc PIXBUF_ANIMATION*(anObject: pointer): PPixbufAnimation 49 | proc IS_PIXBUF_ANIMATION*(anObject: pointer): bool 50 | proc TYPE_PIXBUF_ANIMATION_ITER*(): GType 51 | proc PIXBUF_ANIMATION_ITER*(anObject: pointer): PPixbufAnimationIter 52 | proc IS_PIXBUF_ANIMATION_ITER*(anObject: pointer): bool 53 | proc PIXBUF_ERROR*(): TGQuark 54 | proc pixbuf_error_quark*(): TGQuark{.cdecl, dynlib: pixbuflib, 55 | importc: "gdk_pixbuf_error_quark".} 56 | proc pixbuf_get_type*(): GType{.cdecl, dynlib: pixbuflib, 57 | importc: "gdk_pixbuf_get_type".} 58 | when not declared(PIXBUF_DISABLE_DEPRECATED): 59 | proc pixbuf_ref*(pixbuf: PPixbuf): PPixbuf{.cdecl, dynlib: pixbuflib, 60 | importc: "gdk_pixbuf_ref".} 61 | proc pixbuf_unref*(pixbuf: PPixbuf){.cdecl, dynlib: pixbuflib, 62 | importc: "gdk_pixbuf_unref".} 63 | proc get_colorspace*(pixbuf: PPixbuf): TColorspace{.cdecl, 64 | dynlib: pixbuflib, importc: "gdk_pixbuf_get_colorspace".} 65 | proc get_n_channels*(pixbuf: PPixbuf): int32{.cdecl, dynlib: pixbuflib, 66 | importc: "gdk_pixbuf_get_n_channels".} 67 | proc get_has_alpha*(pixbuf: PPixbuf): gboolean{.cdecl, dynlib: pixbuflib, 68 | importc: "gdk_pixbuf_get_has_alpha".} 69 | proc get_bits_per_sample*(pixbuf: PPixbuf): int32{.cdecl, 70 | dynlib: pixbuflib, importc: "gdk_pixbuf_get_bits_per_sample".} 71 | proc get_pixels*(pixbuf: PPixbuf): Pguchar{.cdecl, dynlib: pixbuflib, 72 | importc: "gdk_pixbuf_get_pixels".} 73 | proc get_width*(pixbuf: PPixbuf): int32{.cdecl, dynlib: pixbuflib, 74 | importc: "gdk_pixbuf_get_width".} 75 | proc get_height*(pixbuf: PPixbuf): int32{.cdecl, dynlib: pixbuflib, 76 | importc: "gdk_pixbuf_get_height".} 77 | proc get_rowstride*(pixbuf: PPixbuf): int32{.cdecl, dynlib: pixbuflib, 78 | importc: "gdk_pixbuf_get_rowstride".} 79 | proc pixbuf_new*(colorspace: TColorspace, has_alpha: gboolean, 80 | bits_per_sample: int32, width: int32, height: int32): PPixbuf{. 81 | cdecl, dynlib: pixbuflib, importc: "gdk_pixbuf_new".} 82 | proc copy*(pixbuf: PPixbuf): PPixbuf{.cdecl, dynlib: pixbuflib, 83 | importc: "gdk_pixbuf_copy".} 84 | proc new_subpixbuf*(src_pixbuf: PPixbuf, src_x: int32, src_y: int32, 85 | width: int32, height: int32): PPixbuf{.cdecl, 86 | dynlib: pixbuflib, importc: "gdk_pixbuf_new_subpixbuf".} 87 | proc pixbuf_new_from_file*(filename: cstring, error: pointer): PPixbuf{.cdecl, 88 | dynlib: pixbuflib, importc: "gdk_pixbuf_new_from_file".} 89 | proc pixbuf_new_from_data*(data: Pguchar, colorspace: TColorspace, 90 | has_alpha: gboolean, bits_per_sample: int32, 91 | width: int32, height: int32, rowstride: int32, 92 | destroy_fn: TPixbufDestroyNotify, 93 | destroy_fn_data: gpointer): PPixbuf{.cdecl, 94 | dynlib: pixbuflib, importc: "gdk_pixbuf_new_from_data".} 95 | proc pixbuf_new_from_xpm_data*(data: PPchar): PPixbuf{.cdecl, dynlib: pixbuflib, 96 | importc: "gdk_pixbuf_new_from_xpm_data".} 97 | proc pixbuf_new_from_inline*(data_length: gint, a: var guint8, 98 | copy_pixels: gboolean, error: pointer): PPixbuf{. 99 | cdecl, dynlib: pixbuflib, importc: "gdk_pixbuf_new_from_inline".} 100 | proc pixbuf_new_from_file_at_size*(filename: cstring, width, height: gint, 101 | error: pointer): PPixbuf{.cdecl, 102 | dynlib: pixbuflib, importc: "gdk_pixbuf_new_from_file_at_size".} 103 | proc pixbuf_new_from_file_at_scale*(filename: cstring, width, height: gint, 104 | preserve_aspect_ratio: gboolean, 105 | error: pointer): PPixbuf{.cdecl, 106 | dynlib: pixbuflib, importc: "gdk_pixbuf_new_from_file_at_scale".} 107 | proc fill*(pixbuf: PPixbuf, pixel: guint32){.cdecl, dynlib: pixbuflib, 108 | importc: "gdk_pixbuf_fill".} 109 | proc save*(pixbuf: PPixbuf, filename: cstring, `type`: cstring, 110 | error: pointer): gboolean{.cdecl, varargs, dynlib: pixbuflib, 111 | importc: "gdk_pixbuf_save".} 112 | proc savev*(pixbuf: PPixbuf, filename: cstring, `type`: cstring, 113 | option_keys: PPchar, option_values: PPchar, error: pointer): gboolean{. 114 | cdecl, dynlib: pixbuflib, importc: "gdk_pixbuf_savev".} 115 | proc add_alpha*(pixbuf: PPixbuf, substitute_color: gboolean, r: guchar, 116 | g: guchar, b: guchar): PPixbuf{.cdecl, dynlib: pixbuflib, 117 | importc: "gdk_pixbuf_add_alpha".} 118 | proc copy_area*(src_pixbuf: PPixbuf, src_x: int32, src_y: int32, 119 | width: int32, height: int32, dest_pixbuf: PPixbuf, 120 | dest_x: int32, dest_y: int32){.cdecl, dynlib: pixbuflib, 121 | importc: "gdk_pixbuf_copy_area".} 122 | proc saturate_and_pixelate*(src: PPixbuf, dest: PPixbuf, 123 | saturation: gfloat, pixelate: gboolean){. 124 | cdecl, dynlib: pixbuflib, importc: "gdk_pixbuf_saturate_and_pixelate".} 125 | proc scale*(src: PPixbuf, dest: PPixbuf, dest_x: int32, dest_y: int32, 126 | dest_width: int32, dest_height: int32, offset_x: float64, 127 | offset_y: float64, scale_x: float64, scale_y: float64, 128 | interp_type: TInterpType){.cdecl, dynlib: pixbuflib, 129 | importc: "gdk_pixbuf_scale".} 130 | proc composite*(src: PPixbuf, dest: PPixbuf, dest_x: int32, 131 | dest_y: int32, dest_width: int32, dest_height: int32, 132 | offset_x: float64, offset_y: float64, scale_x: float64, 133 | scale_y: float64, interp_type: TInterpType, 134 | overall_alpha: int32){.cdecl, dynlib: pixbuflib, 135 | importc: "gdk_pixbuf_composite".} 136 | proc composite_color*(src: PPixbuf, dest: PPixbuf, dest_x: int32, 137 | dest_y: int32, dest_width: int32, 138 | dest_height: int32, offset_x: float64, 139 | offset_y: float64, scale_x: float64, 140 | scale_y: float64, interp_type: TInterpType, 141 | overall_alpha: int32, check_x: int32, 142 | check_y: int32, check_size: int32, color1: guint32, 143 | color2: guint32){.cdecl, dynlib: pixbuflib, 144 | importc: "gdk_pixbuf_composite_color".} 145 | proc scale_simple*(src: PPixbuf, dest_width: int32, dest_height: int32, 146 | interp_type: TInterpType): PPixbuf{.cdecl, 147 | dynlib: pixbuflib, importc: "gdk_pixbuf_scale_simple".} 148 | proc composite_color_simple*(src: PPixbuf, dest_width: int32, 149 | dest_height: int32, 150 | interp_type: TInterpType, 151 | overall_alpha: int32, check_size: int32, 152 | color1: guint32, color2: guint32): PPixbuf{. 153 | cdecl, dynlib: pixbuflib, importc: "gdk_pixbuf_composite_color_simple".} 154 | proc pixbuf_animation_get_type*(): GType{.cdecl, dynlib: pixbuflib, 155 | importc: "gdk_pixbuf_animation_get_type".} 156 | proc pixbuf_animation_new_from_file*(filename: cstring, error: pointer): PPixbufAnimation{. 157 | cdecl, dynlib: pixbuflib, importc: "gdk_pixbuf_animation_new_from_file".} 158 | when not declared(PIXBUF_DISABLE_DEPRECATED): 159 | proc pixbuf_animation_ref*(animation: PPixbufAnimation): PPixbufAnimation{. 160 | cdecl, dynlib: pixbuflib, importc: "gdk_pixbuf_animation_ref".} 161 | proc pixbuf_animation_unref*(animation: PPixbufAnimation){.cdecl, 162 | dynlib: pixbuflib, importc: "gdk_pixbuf_animation_unref".} 163 | proc get_width*(animation: PPixbufAnimation): int32{.cdecl, 164 | dynlib: pixbuflib, importc: "gdk_pixbuf_animation_get_width".} 165 | proc get_height*(animation: PPixbufAnimation): int32{.cdecl, 166 | dynlib: pixbuflib, importc: "gdk_pixbuf_animation_get_height".} 167 | proc is_static_image*(animation: PPixbufAnimation): gboolean{. 168 | cdecl, dynlib: pixbuflib, importc: "gdk_pixbuf_animation_is_static_image".} 169 | proc get_static_image*(animation: PPixbufAnimation): PPixbuf{. 170 | cdecl, dynlib: pixbuflib, importc: "gdk_pixbuf_animation_get_static_image".} 171 | proc get_iter*(animation: PPixbufAnimation, e: var TGTimeVal): PPixbufAnimationIter{. 172 | cdecl, dynlib: pixbuflib, importc: "gdk_pixbuf_animation_get_iter".} 173 | proc pixbuf_animation_iter_get_type*(): GType{.cdecl, dynlib: pixbuflib, 174 | importc: "gdk_pixbuf_animation_iter_get_type".} 175 | proc iter_get_delay_time*(iter: PPixbufAnimationIter): int32{. 176 | cdecl, dynlib: pixbuflib, 177 | importc: "gdk_pixbuf_animation_iter_get_delay_time".} 178 | proc iter_get_pixbuf*(iter: PPixbufAnimationIter): PPixbuf{. 179 | cdecl, dynlib: pixbuflib, importc: "gdk_pixbuf_animation_iter_get_pixbuf".} 180 | proc pixbuf_animation_iter_on_currently_loading_frame*( 181 | iter: PPixbufAnimationIter): gboolean{.cdecl, dynlib: pixbuflib, 182 | importc: "gdk_pixbuf_animation_iter_on_currently_loading_frame".} 183 | proc iter_advance*(iter: PPixbufAnimationIter, e: var TGTimeVal): gboolean{. 184 | cdecl, dynlib: pixbuflib, importc: "gdk_pixbuf_animation_iter_advance".} 185 | proc get_option*(pixbuf: PPixbuf, key: cstring): cstring{.cdecl, 186 | dynlib: pixbuflib, importc: "gdk_pixbuf_get_option".} 187 | type 188 | PPixbufLoader* = ptr TPixbufLoader 189 | TPixbufLoader*{.final, pure.} = object 190 | parent_instance*: TGObject 191 | priv*: gpointer 192 | 193 | PPixbufLoaderClass* = ptr TPixbufLoaderClass 194 | TPixbufLoaderClass*{.final, pure.} = object 195 | parent_class*: TGObjectClass 196 | area_prepared*: proc (loader: PPixbufLoader){.cdecl.} 197 | area_updated*: proc (loader: PPixbufLoader, x: int32, y: int32, 198 | width: int32, height: int32){.cdecl.} 199 | closed*: proc (loader: PPixbufLoader){.cdecl.} 200 | 201 | 202 | proc TYPE_PIXBUF_LOADER*(): GType 203 | proc PIXBUF_LOADER*(obj: pointer): PPixbufLoader 204 | proc PIXBUF_LOADER_CLASS*(klass: pointer): PPixbufLoaderClass 205 | proc IS_PIXBUF_LOADER*(obj: pointer): bool 206 | proc IS_PIXBUF_LOADER_CLASS*(klass: pointer): bool 207 | proc PIXBUF_LOADER_GET_CLASS*(obj: pointer): PPixbufLoaderClass 208 | proc pixbuf_loader_get_type*(): GType{.cdecl, dynlib: pixbuflib, 209 | importc: "gdk_pixbuf_loader_get_type".} 210 | proc pixbuf_loader_new*(): PPixbufLoader{.cdecl, dynlib: pixbuflib, 211 | importc: "gdk_pixbuf_loader_new".} 212 | proc pixbuf_loader_new*(image_type: cstring, error: pointer): PPixbufLoader{. 213 | cdecl, dynlib: pixbuflib, importc: "gdk_pixbuf_loader_new_with_type".} 214 | proc write*(loader: PPixbufLoader, buf: Pguchar, count: gsize, 215 | error: pointer): gboolean{.cdecl, dynlib: pixbuflib, 216 | importc: "gdk_pixbuf_loader_write".} 217 | proc get_pixbuf*(loader: PPixbufLoader): PPixbuf{.cdecl, 218 | dynlib: pixbuflib, importc: "gdk_pixbuf_loader_get_pixbuf".} 219 | proc get_animation*(loader: PPixbufLoader): PPixbufAnimation{. 220 | cdecl, dynlib: pixbuflib, importc: "gdk_pixbuf_loader_get_animation".} 221 | proc close*(loader: PPixbufLoader, error: pointer): gboolean{. 222 | cdecl, dynlib: pixbuflib, importc: "gdk_pixbuf_loader_close".} 223 | proc TYPE_PIXBUF_LOADER*(): GType = 224 | result = pixbuf_loader_get_type() 225 | 226 | proc PIXBUF_LOADER*(obj: pointer): PPixbufLoader = 227 | result = cast[PPixbufLoader](G_TYPE_CHECK_INSTANCE_CAST(obj, 228 | TYPE_PIXBUF_LOADER())) 229 | 230 | proc PIXBUF_LOADER_CLASS*(klass: pointer): PPixbufLoaderClass = 231 | result = cast[PPixbufLoaderClass](G_TYPE_CHECK_CLASS_CAST(klass, 232 | TYPE_PIXBUF_LOADER())) 233 | 234 | proc IS_PIXBUF_LOADER*(obj: pointer): bool = 235 | result = G_TYPE_CHECK_INSTANCE_TYPE(obj, TYPE_PIXBUF_LOADER()) 236 | 237 | proc IS_PIXBUF_LOADER_CLASS*(klass: pointer): bool = 238 | result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_PIXBUF_LOADER()) 239 | 240 | proc PIXBUF_LOADER_GET_CLASS*(obj: pointer): PPixbufLoaderClass = 241 | result = cast[PPixbufLoaderClass](G_TYPE_INSTANCE_GET_CLASS(obj, 242 | TYPE_PIXBUF_LOADER())) 243 | 244 | proc TYPE_PIXBUF*(): GType = 245 | result = pixbuf_get_type() 246 | 247 | proc PIXBUF*(anObject: pointer): PPixbuf = 248 | result = cast[PPixbuf](G_TYPE_CHECK_INSTANCE_CAST(anObject, TYPE_PIXBUF())) 249 | 250 | proc IS_PIXBUF*(anObject: pointer): bool = 251 | result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_PIXBUF()) 252 | 253 | proc TYPE_PIXBUF_ANIMATION*(): GType = 254 | result = pixbuf_animation_get_type() 255 | 256 | proc PIXBUF_ANIMATION*(anObject: pointer): PPixbufAnimation = 257 | result = cast[PPixbufAnimation](G_TYPE_CHECK_INSTANCE_CAST(anObject, 258 | TYPE_PIXBUF_ANIMATION())) 259 | 260 | proc IS_PIXBUF_ANIMATION*(anObject: pointer): bool = 261 | result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_PIXBUF_ANIMATION()) 262 | 263 | proc TYPE_PIXBUF_ANIMATION_ITER*(): GType = 264 | result = pixbuf_animation_iter_get_type() 265 | 266 | proc PIXBUF_ANIMATION_ITER*(anObject: pointer): PPixbufAnimationIter = 267 | result = cast[PPixbufAnimationIter](G_TYPE_CHECK_INSTANCE_CAST(anObject, 268 | TYPE_PIXBUF_ANIMATION_ITER())) 269 | 270 | proc IS_PIXBUF_ANIMATION_ITER*(anObject: pointer): bool = 271 | result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_PIXBUF_ANIMATION_ITER()) 272 | 273 | proc PIXBUF_ERROR*(): TGQuark = 274 | result = pixbuf_error_quark() 275 | {.pop.} 276 | -------------------------------------------------------------------------------- /src/gdk2x.nim: -------------------------------------------------------------------------------- 1 | {.deadCodeElim: on.} 2 | import gdk2, glib2, gdk2pixbuf, pango, cairo 3 | import x, xlib , xutil 4 | 5 | when defined(win32): 6 | const 7 | lib = "libgdk-win32-2.0-0.dll" 8 | elif declared(gtk_quartz): 9 | const 10 | lib = "libgdk-quartz-2.0.dylib" 11 | elif defined(macosx): 12 | const 13 | lib = "libgdk-x11-2.0.dylib" 14 | else: 15 | const 16 | lib = "libgdk-x11-2.0.so(|.0)" 17 | 18 | proc x11_drawable_get_xdisplay*(drawable: gdk2.PDrawable): xlib.PDisplay {.cdecl, 19 | dynlib: lib, importc: "gdk_x11_drawable_get_xdisplay".} 20 | proc x11_drawable_get_xid*(drawable: gdk2.PDrawable): TXID {.cdecl, 21 | dynlib: lib, importc: "gdk_x11_drawable_get_xid".} 22 | proc x11_window_get_drawable_impl*(window: gdk2.PWindow): gdk2.PDrawable {.cdecl, 23 | dynlib: lib, importc: "gdk_x11_window_get_drawable_impl".} 24 | proc x11_pixmap_get_drawable_impl*(pixmap: gdk2.PPixmap): gdk2.PDrawable {.cdecl, 25 | dynlib: lib, importc: "gdk_x11_pixmap_get_drawable_impl".} 26 | proc x11_image_get_xdisplay*(image: PImage): xlib.PDisplay {.cdecl, 27 | dynlib: lib, importc: "gdk_x11_image_get_xdisplay".} 28 | proc x11_image_get_ximage*(image: PImage): PXImage {.cdecl, 29 | dynlib: lib, importc: "gdk_x11_image_get_ximage".} 30 | proc x11_colormap_get_xdisplay*(colormap: gdk2.PColormap): xlib.PDisplay {.cdecl, 31 | dynlib: lib, importc: "gdk_x11_colormap_get_xdisplay".} 32 | proc x11_colormap_get_xcolormap*(colormap: gdk2.PColormap): x.PColormap {.cdecl, 33 | dynlib: lib, importc: "gdk_x11_colormap_get_xcolormap".} 34 | proc x11_cursor_get_xdisplay*(cursor: gdk2.PCursor): xlib.PDisplay {.cdecl, 35 | dynlib: lib, importc: "gdk_x11_cursor_get_xdisplay".} 36 | proc x11_cursor_get_xcursor*(cursor: gdk2.PCursor): x.PCursor {.cdecl, 37 | dynlib: lib, importc: "gdk_x11_cursor_get_xcursor".} 38 | proc x11_display_get_xdisplay*(display: gdk2.PDisplay): xlib.PDisplay {.cdecl, 39 | dynlib: lib, importc: "gdk_x11_display_get_xdisplay".} 40 | proc x11_visual_get_xvisual*(visual: gdk2.PVisual): xlib.PVisual {.cdecl, 41 | dynlib: lib, importc: "gdk_x11_visual_get_xvisual".} 42 | proc x11_screen_get_xscreen*(screen: gdk2.PScreen): xlib.PScreen {.cdecl, 43 | dynlib: lib, importc: "gdk_x11_screen_get_xscreen".} 44 | proc x11_screen_get_screen_number*(screen: gdk2.PScreen): cint {.cdecl, 45 | dynlib: lib, importc: "gdk_x11_screen_get_screen_number".} 46 | proc x11_window_set_user_time*(window: gdk2.PWindow, timestamp: guint32) {.cdecl, 47 | dynlib: lib, importc: "gdk_x11_window_set_user_time".} 48 | proc x11_window_move_to_current_desktop*(window: gdk2.PWindow) {.cdecl, 49 | dynlib: lib, importc: "gdk_x11_window_move_to_current_desktop".} 50 | proc x11_screen_get_window_manager_name*(screen: gdk2.PScreen): cstring {.cdecl, 51 | dynlib: lib, importc: "gdk_x11_screen_get_window_manager_name".} 52 | 53 | # NOT Multihead safe 54 | proc x11_get_default_root_xwindow*(): x.PWindow {.cdecl, 55 | dynlib: lib, importc: "gdk_x11_get_default_root_xwindow".} 56 | proc x11_get_default_xdisplay*(): xlib.PDisplay {.cdecl, 57 | dynlib: lib, importc: "gdk_x11_get_default_xdisplay".} 58 | proc x11_get_default_screen*(): gint {.cdecl, 59 | dynlib: lib, importc: "gdk_x11_get_default_screen".} 60 | # -- not multihead safe 61 | proc COLORMAP_XDISPLAY*(cmap: gdk2.PColormap): xlib.PDisplay = 62 | result = x11_colormap_get_xdisplay(cmap) 63 | proc COLORMAP_XCOLORMAP*(cmap: gdk2.PColormap): x.PColormap = 64 | result = x11_colormap_get_xcolormap(cmap) 65 | proc CURSOR_XDISPLAY*(cursor: gdk2.PCursor): xlib.PDisplay = 66 | result = x11_cursor_get_xdisplay(cursor) 67 | proc CURSOR_XCURSOR*(cursor: gdk2.PCursor): x.PCursor = 68 | result = x11_cursor_get_xcursor(cursor) 69 | proc IMAGE_XDISPLAY*(image: PImage): xlib.PDisplay = 70 | result = x11_image_get_xdisplay(image) 71 | proc IMAGE_XIMAGE*(image: PImage): PXImage = 72 | result = x11_image_get_ximage(image) 73 | 74 | # NOT Multihead safe 75 | proc ROOT_WINDOW*(): x.PWindow = 76 | result = x11_get_default_root_xwindow() 77 | # -- not multihead safe 78 | proc DISPLAY_XDISPLAY*(display: gdk2.PDisplay): xlib.PDisplay = 79 | result = x11_display_get_xdisplay(display) 80 | proc WINDOW_XDISPLAY*(win: gdk2.PWindow): xlib.PDisplay = 81 | result = x11_drawable_get_xdisplay(x11_window_get_drawable_impl(win)) 82 | proc WINDOW_XID*(win: gdk2.PWindow): TXID = 83 | result = x11_drawable_get_xid(win) 84 | proc WINDOW_XWINDOW*(win: gdk2.PWindow): TXID = 85 | result = x11_drawable_get_xid(win) 86 | proc PIXMAP_XDISPLAY*(win: gdk2.PPixmap): xlib.PDisplay = 87 | result = x11_drawable_get_xdisplay(x11_pixmap_get_drawable_impl(win)) 88 | proc PIXMAP_XID*(win: gdk2.PDrawable): TXID = 89 | result = x11_drawable_get_xid(win) 90 | proc DRAWABLE_XDISPLAY*(win: gdk2.PDrawable): xlib.PDisplay = 91 | result = x11_drawable_get_xdisplay(win) 92 | proc DRAWABLE_XID*(win: gdk2.PDrawable): TXID = 93 | result = x11_drawable_get_xid(win) 94 | proc SCREEN_XDISPLAY*(screen: gdk2.PScreen): xlib.PDisplay = 95 | result = x11_display_get_xdisplay(gdk2.get_display(screen)) 96 | proc SCREEN_XSCREEN*(screen: gdk2.PScreen): xlib.PScreen = 97 | result = x11_screen_get_xscreen(screen) 98 | proc SCREEN_XNUMBER*(screen: gdk2.PScreen): cint = 99 | result = x11_screen_get_screen_number(screen) 100 | proc VISUAL_XVISUAL*(visual: gdk2.PVisual): xlib.PVisual = 101 | result = x11_visual_get_xvisual(visual) 102 | 103 | proc x11_screen_lookup_visual*(screen: gdk2.PScreen, 104 | xvisualid: x.PVisualID): gdk2.PVisual {.cdecl, 105 | dynlib: lib, importc: "gdk_x11_screen_lookup_visual".} 106 | proc x11_colormap_foreign_new*(visual: gdk2.PVisual, 107 | xcolormap: x.PColormap): gdk2.PColormap {.cdecl, 108 | dynlib: lib, importc: "gdk_x11_colormap_foreign_new".} 109 | proc x11_get_server_time*(window: gdk2.PWindow): guint32 {.cdecl, 110 | dynlib: lib, importc: "gdk_x11_get_server_time".} 111 | proc x11_display_get_user_time*(display: gdk2.PDisplay): guint32 {.cdecl, 112 | dynlib: lib, importc: "gdk_x11_display_get_user_time".} 113 | proc x11_display_get_startup_notification_id*(display: gdk2.PDisplay): PPgchar {.cdecl, 114 | dynlib: lib, importc: "gdk_x11_display_get_startup_notification_id".} 115 | proc x11_display_set_cursor_theme*(display: gdk2.PDisplay, theme: PPgchar, size: gint) {.cdecl, 116 | dynlib: lib, importc: "gdk_x11_display_set_cursor_theme".} 117 | proc x11_display_broadcast_startup_message*(display: gdk2.PDisplay, 118 | message_type: cstring) {.cdecl, varargs, 119 | dynlib: lib, importc: "gdk_x11_display_broadcast_startup_message".} 120 | proc x11_screen_supports_net_wm_hint*(screen: gdk2.PScreen, property: gdk2.PAtom): gboolean {.cdecl, 121 | dynlib: lib, importc: "gdk_x11_screen_supports_net_wm_hint".} 122 | proc x11_screen_get_monitor_output*(screen: gdk2.PScreen; monitor_num: gint): PXID {.cdecl, 123 | dynlib: lib, importc: "gdk_x11_screen_get_monitor_output".} 124 | 125 | # NOT Multihead safe 126 | proc x11_grab_server*() {.cdecl, 127 | dynlib: lib, importc: "gdk_x11_grab_server".} 128 | proc x11_ungrab_server*() {.cdecl, 129 | dynlib: lib, importc: "gdk_x11_ungrab_server".} 130 | # -- not multihead safe 131 | proc x11_lookup_xdisplay*(xdisplay: xlib.PDisplay): gdk2.PDisplay {.cdecl, 132 | dynlib: lib, importc: "gdk_x11_lookup_xdisplay".} 133 | proc x11_atom_to_xatom_for_display*(display: gdk2.PDisplay, 134 | atom: gdk2.PAtom): x.PAtom {.cdecl, 135 | dynlib: lib, importc: "gdk_x11_atom_to_xatom_for_display".} 136 | proc x11_xatom_to_atom_for_display*(display: gdk2.PDisplay, 137 | xatom: x.PAtom): gdk2.PAtom {.cdecl, 138 | dynlib: lib, importc: "gdk_x11_xatom_to_atom_for_display".} 139 | proc x11_get_xatom_by_name_for_display*(display: gdk2.PDisplay, 140 | atom_name: PPgchar): x.PAtom {.cdecl, 141 | dynlib: lib, importc: "gdk_x11_get_xatom_by_name_for_display".} 142 | proc x11_get_xatom_name_for_display*(display: gdk2.PDisplay, 143 | xatom: x.PAtom): PPgchar {.cdecl, 144 | dynlib: lib, importc: "gdk_x11_get_xatom_name_for_display".} 145 | 146 | proc x11_atom_to_xatom*(atom: gdk2.PAtom): x.PAtom {.cdecl, 147 | dynlib: lib, importc: "gdk_x11_atom_to_xatom".} 148 | proc x11_xatom_to_atom*(xatom: x.PAtom): gdk2.PAtom {.cdecl, 149 | dynlib: lib, importc: "gdk_x11_xatom_to_atom".} 150 | proc x11_get_xatom_by_name*(atom_name: PPgchar): x.PAtom {.cdecl, 151 | dynlib: lib, importc: "gdk_x11_get_xatom_by_name".} 152 | proc x11_get_xatom_name*(xatom: x.PAtom): PPgchar {.cdecl, 153 | dynlib: lib, importc: "gdk_x11_get_xatom_name".} 154 | proc x11_display_grab*(display: gdk2.PDisplay) {.cdecl, 155 | dynlib: lib, importc: "gdk_x11_display_grab".} 156 | proc x11_display_ungrab*(display: gdk2.PDisplay) {.cdecl, 157 | dynlib: lib, importc: "gdk_x11_display_ungrab".} 158 | proc x11_register_standard_event_type*(display: gdk2.PDisplay, 159 | event_base: gint, n_events: gint) {.cdecl, 160 | dynlib: lib, importc: "gdk_x11_register_standard_event_type".} 161 | proc x11_set_sm_client_id*(sm_client_id: glib2.PPgchar) {.cdecl, 162 | dynlib: lib, importc: "gdk_x11_set_sm_client_id".} 163 | proc x11_window_foreign_new_for_display*(display: gdk2.PDisplay, 164 | window: x.PWindow): gdk2.PWindow {.cdecl, 165 | dynlib: lib, importc: "gdk_x11_window_foreign_new_for_display".} 166 | proc x11_window_lookup_for_display*(display: gdk2.PDisplay, 167 | window: x.PWindow): gdk2.PWindow {.cdecl, 168 | dynlib: lib, importc: "gdk_x11_window_lookup_for_display".} 169 | proc x11_display_text_property_to_text_list*(display: gdk2.PDisplay, 170 | encoding: gdk2.PAtom, format: gint, text: PPguchar, length: gint, 171 | list: PPPgchar): gint {.cdecl, 172 | dynlib: lib, importc: "gdk_x11_display_text_property_to_text_list".} 173 | proc x11_free_text_list*(list: PPgchar) {.cdecl, 174 | dynlib: lib, importc: "gdk_x11_free_text_list".} 175 | proc x11_display_string_to_compound_text*(display: gdk2.PDisplay, 176 | str: PPgchar, encoding: gdk2.PAtom, format: gint, 177 | ctext: PPPgchar, length: gint): gint {.cdecl, 178 | dynlib: lib, importc: "gdk_x11_display_string_to_compound_text".} 179 | proc x11_display_utf8_to_compound_text*(display: gdk2.PDisplay, 180 | str: PPgchar, encoding: gdk2.PAtom, format: gint, 181 | ctext: PPPgchar, length: gint): gboolean {.cdecl, 182 | dynlib: lib, importc: "gdk_x11_display_utf8_to_compound_text".} 183 | proc x11_free_compound_text*(ctext: PPguchar) {.cdecl, 184 | dynlib: lib, importc: "gdk_x11_free_compound_text".} 185 | -------------------------------------------------------------------------------- /src/gdkglext.nim: -------------------------------------------------------------------------------- 1 | {.deadCodeElim: on.} 2 | {.push gcsafe.} 3 | import 4 | Glib2, gdk2 5 | 6 | when defined(WIN32): 7 | const 8 | GLExtLib = "libgdkglext-win32-1.0-0.dll" 9 | elif defined(macosx): 10 | const 11 | GLExtLib = "libgdkglext-x11-1.0.dylib" 12 | else: 13 | const 14 | GLExtLib = "libgdkglext-x11-1.0.so" 15 | type 16 | TGLConfigAttrib* = int32 17 | TGLConfigCaveat* = int32 18 | TGLVisualType* = int32 19 | TGLTransparentType* = int32 20 | TGLDrawableTypeMask* = int32 21 | TGLRenderTypeMask* = int32 22 | TGLBufferMask* = int32 23 | TGLConfigError* = int32 24 | TGLRenderType* = int32 25 | TGLDrawableAttrib* = int32 26 | TGLPbufferAttrib* = int32 27 | TGLEventMask* = int32 28 | TGLEventType* = int32 29 | TGLDrawableType* = int32 30 | TGLProc* = pointer 31 | PGLConfig* = ptr TGLConfig 32 | PGLContext* = ptr TGLContext 33 | PGLDrawable* = ptr TGLDrawable 34 | PGLPixmap* = ptr TGLPixmap 35 | PGLWindow* = ptr TGLWindow 36 | TGLConfig* = object of TGObject 37 | layer_plane*: gint 38 | n_aux_buffers*: gint 39 | n_sample_buffers*: gint 40 | flag0*: int16 41 | 42 | PGLConfigClass* = ptr TGLConfigClass 43 | TGLConfigClass* = object of TGObjectClass 44 | TGLContext* = object of TGObject 45 | PGLContextClass* = ptr TGLContextClass 46 | TGLContextClass* = object of TGObjectClass 47 | TGLDrawable* = object of TGObject 48 | PGLDrawableClass* = ptr TGLDrawableClass 49 | TGLDrawableClass* = object of TGTypeInterface 50 | create_new_context*: proc (gldrawable: PGLDrawable, share_list: PGLContext, 51 | direct: gboolean, render_type: int32): PGLContext{. 52 | cdecl.} 53 | make_context_current*: proc (draw: PGLDrawable, a_read: PGLDrawable, 54 | glcontext: PGLContext): gboolean{.cdecl.} 55 | is_double_buffered*: proc (gldrawable: PGLDrawable): gboolean{.cdecl.} 56 | swap_buffers*: proc (gldrawable: PGLDrawable){.cdecl.} 57 | wait_gl*: proc (gldrawable: PGLDrawable){.cdecl.} 58 | wait_gdk*: proc (gldrawable: PGLDrawable){.cdecl.} 59 | gl_begin*: proc (draw: PGLDrawable, a_read: PGLDrawable, 60 | glcontext: PGLContext): gboolean{.cdecl.} 61 | gl_end*: proc (gldrawable: PGLDrawable){.cdecl.} 62 | get_gl_config*: proc (gldrawable: PGLDrawable): PGLConfig{.cdecl.} 63 | get_size*: proc (gldrawable: PGLDrawable, width, height: Pgint){.cdecl.} 64 | 65 | TGLPixmap* = object of TGObject 66 | drawable*: PDrawable 67 | 68 | PGLPixmapClass* = ptr TGLPixmapClass 69 | TGLPixmapClass* = object of TGObjectClass 70 | TGLWindow* = object of TGObject 71 | drawable*: PDrawable 72 | 73 | PGLWindowClass* = ptr TGLWindowClass 74 | TGLWindowClass* = object of TGObjectClass 75 | 76 | const 77 | HEADER_GDKGLEXT_MAJOR_VERSION* = 1 78 | HEADER_GDKGLEXT_MINOR_VERSION* = 0 79 | HEADER_GDKGLEXT_MICRO_VERSION* = 6 80 | HEADER_GDKGLEXT_INTERFACE_AGE* = 4 81 | HEADER_GDKGLEXT_BINARY_AGE* = 6 82 | 83 | proc HEADER_GDKGLEXT_CHECK_VERSION*(major, minor, micro: guint): bool 84 | var 85 | glext_major_version*{.importc, dynlib: GLExtLib.}: guint 86 | glext_minor_version*{.importc, dynlib: GLExtLib.}: guint 87 | glext_micro_version*{.importc, dynlib: GLExtLib.}: guint 88 | glext_interface_age*{.importc, dynlib: GLExtLib.}: guint 89 | glext_binary_age*{.importc, dynlib: GLExtLib.}: guint 90 | 91 | const 92 | GL_SUCCESS* = 0 93 | GL_ATTRIB_LIST_NONE* = 0 94 | GL_USE_GL* = 1 95 | GL_BUFFER_SIZE* = 2 96 | GL_LEVEL* = 3 97 | GL_RGBA* = 4 98 | GL_DOUBLEBUFFER* = 5 99 | GL_STEREO* = 6 100 | GL_AUX_BUFFERS* = 7 101 | GL_RED_SIZE* = 8 102 | GL_GREEN_SIZE* = 9 103 | GL_BLUE_SIZE* = 10 104 | GL_ALPHA_SIZE* = 11 105 | GL_DEPTH_SIZE* = 12 106 | GL_STENCIL_SIZE* = 13 107 | GL_ACCUM_RED_SIZE* = 14 108 | GL_ACCUM_GREEN_SIZE* = 15 109 | GL_ACCUM_BLUE_SIZE* = 16 110 | GL_ACCUM_ALPHA_SIZE* = 17 111 | GL_CONFIG_CAVEAT* = 0x00000020 112 | GL_X_VISUAL_TYPE* = 0x00000022 113 | GL_TRANSPARENT_TYPE* = 0x00000023 114 | GL_TRANSPARENT_INDEX_VALUE* = 0x00000024 115 | GL_TRANSPARENT_RED_VALUE* = 0x00000025 116 | GL_TRANSPARENT_GREEN_VALUE* = 0x00000026 117 | GL_TRANSPARENT_BLUE_VALUE* = 0x00000027 118 | GL_TRANSPARENT_ALPHA_VALUE* = 0x00000028 119 | GL_DRAWABLE_TYPE* = 0x00008010 120 | GL_RENDER_TYPE* = 0x00008011 121 | GL_X_RENDERABLE* = 0x00008012 122 | GL_FBCONFIG_ID* = 0x00008013 123 | GL_MAX_PBUFFER_WIDTH* = 0x00008016 124 | GL_MAX_PBUFFER_HEIGHT* = 0x00008017 125 | GL_MAX_PBUFFER_PIXELS* = 0x00008018 126 | GL_VISUAL_ID* = 0x0000800B 127 | GL_SCREEN* = 0x0000800C 128 | GL_SAMPLE_BUFFERS* = 100000 129 | GL_SAMPLES* = 100001 130 | GL_DONT_CARE* = 0xFFFFFFFF 131 | GL_NONE* = 0x00008000 132 | GL_CONFIG_CAVEAT_DONT_CARE* = 0xFFFFFFFF 133 | GL_CONFIG_CAVEAT_NONE* = 0x00008000 134 | GL_SLOW_CONFIG* = 0x00008001 135 | GL_NON_CONFORMANT_CONFIG* = 0x0000800D 136 | GL_VISUAL_TYPE_DONT_CARE* = 0xFFFFFFFF 137 | GL_TRUE_COLOR* = 0x00008002 138 | GL_DIRECT_COLOR* = 0x00008003 139 | GL_PSEUDO_COLOR* = 0x00008004 140 | GL_STATIC_COLOR* = 0x00008005 141 | GL_GRAY_SCALE* = 0x00008006 142 | GL_STATIC_GRAY* = 0x00008007 143 | GL_TRANSPARENT_NONE* = 0x00008000 144 | GL_TRANSPARENT_RGB* = 0x00008008 145 | GL_TRANSPARENT_INDEX* = 0x00008009 146 | GL_WINDOW_BIT* = 1 shl 0 147 | GL_PIXMAP_BIT* = 1 shl 1 148 | GL_PBUFFER_BIT* = 1 shl 2 149 | GL_RGBA_BIT* = 1 shl 0 150 | GL_COLOR_INDEX_BIT* = 1 shl 1 151 | GL_FRONT_LEFT_BUFFER_BIT* = 1 shl 0 152 | GL_FRONT_RIGHT_BUFFER_BIT* = 1 shl 1 153 | GL_BACK_LEFT_BUFFER_BIT* = 1 shl 2 154 | GL_BACK_RIGHT_BUFFER_BIT* = 1 shl 3 155 | GL_AUX_BUFFERS_BIT* = 1 shl 4 156 | GL_DEPTH_BUFFER_BIT* = 1 shl 5 157 | GL_STENCIL_BUFFER_BIT* = 1 shl 6 158 | GL_ACCUM_BUFFER_BIT* = 1 shl 7 159 | GL_BAD_SCREEN* = 1 160 | GL_BAD_ATTRIBUTE* = 2 161 | GL_NO_EXTENSION* = 3 162 | GL_BAD_VISUAL* = 4 163 | GL_BAD_CONTEXT* = 5 164 | GL_BAD_VALUE* = 6 165 | GL_BAD_ENUM* = 7 166 | GL_RGBA_TYPE* = 0x00008014 167 | GL_COLOR_INDEX_TYPE* = 0x00008015 168 | GL_PRESERVED_CONTENTS* = 0x0000801B 169 | GL_LARGEST_PBUFFER* = 0x0000801C 170 | GL_WIDTH* = 0x0000801D 171 | GL_HEIGHT* = 0x0000801E 172 | GL_EVENT_MASK* = 0x0000801F 173 | GL_PBUFFER_PRESERVED_CONTENTS* = 0x0000801B 174 | GL_PBUFFER_LARGEST_PBUFFER* = 0x0000801C 175 | GL_PBUFFER_HEIGHT* = 0x00008040 176 | GL_PBUFFER_WIDTH* = 0x00008041 177 | GL_PBUFFER_CLOBBER_MASK* = 1 shl 27 178 | GL_DAMAGED* = 0x00008020 179 | GL_SAVED* = 0x00008021 180 | GL_WINDOW_VALUE* = 0x00008022 181 | GL_PBUFFER* = 0x00008023 182 | 183 | proc gl_config_attrib_get_type*(): GType{.cdecl, dynlib: GLExtLib, 184 | importc: "gdk_gl_config_attrib_get_type".} 185 | proc TYPE_GL_CONFIG_ATTRIB*(): GType{.cdecl, dynlib: GLExtLib, 186 | importc: "gdk_gl_config_attrib_get_type".} 187 | proc gl_config_caveat_get_type*(): GType{.cdecl, dynlib: GLExtLib, 188 | importc: "gdk_gl_config_caveat_get_type".} 189 | proc TYPE_GL_CONFIG_CAVEAT*(): GType{.cdecl, dynlib: GLExtLib, 190 | importc: "gdk_gl_config_caveat_get_type".} 191 | proc gl_visual_type_get_type*(): GType{.cdecl, dynlib: GLExtLib, 192 | importc: "gdk_gl_visual_type_get_type".} 193 | proc TYPE_GL_VISUAL_TYPE*(): GType{.cdecl, dynlib: GLExtLib, 194 | importc: "gdk_gl_visual_type_get_type".} 195 | proc gl_transparent_type_get_type*(): GType{.cdecl, dynlib: GLExtLib, 196 | importc: "gdk_gl_transparent_type_get_type".} 197 | proc TYPE_GL_TRANSPARENT_TYPE*(): GType{.cdecl, dynlib: GLExtLib, 198 | importc: "gdk_gl_transparent_type_get_type".} 199 | proc gl_drawable_type_mask_get_type*(): GType{.cdecl, dynlib: GLExtLib, 200 | importc: "gdk_gl_drawable_type_mask_get_type".} 201 | proc TYPE_GL_DRAWABLE_TYPE_MASK*(): GType{.cdecl, dynlib: GLExtLib, 202 | importc: "gdk_gl_drawable_type_mask_get_type".} 203 | proc gl_render_type_mask_get_type*(): GType{.cdecl, dynlib: GLExtLib, 204 | importc: "gdk_gl_render_type_mask_get_type".} 205 | proc TYPE_GL_RENDER_TYPE_MASK*(): GType{.cdecl, dynlib: GLExtLib, 206 | importc: "gdk_gl_render_type_mask_get_type".} 207 | proc gl_buffer_mask_get_type*(): GType{.cdecl, dynlib: GLExtLib, 208 | importc: "gdk_gl_buffer_mask_get_type".} 209 | proc TYPE_GL_BUFFER_MASK*(): GType{.cdecl, dynlib: GLExtLib, 210 | importc: "gdk_gl_buffer_mask_get_type".} 211 | proc gl_config_error_get_type*(): GType{.cdecl, dynlib: GLExtLib, 212 | importc: "gdk_gl_config_error_get_type".} 213 | proc TYPE_GL_CONFIG_ERROR*(): GType{.cdecl, dynlib: GLExtLib, 214 | importc: "gdk_gl_config_error_get_type".} 215 | proc gl_render_type_get_type*(): GType{.cdecl, dynlib: GLExtLib, 216 | importc: "gdk_gl_render_type_get_type".} 217 | proc TYPE_GL_RENDER_TYPE*(): GType{.cdecl, dynlib: GLExtLib, 218 | importc: "gdk_gl_render_type_get_type".} 219 | proc gl_drawable_attrib_get_type*(): GType{.cdecl, dynlib: GLExtLib, 220 | importc: "gdk_gl_drawable_attrib_get_type".} 221 | proc TYPE_GL_DRAWABLE_ATTRIB*(): GType{.cdecl, dynlib: GLExtLib, importc: "gdk_gl_drawable_attrib_get_type".} 222 | proc gl_pbuffer_attrib_get_type*(): GType{.cdecl, dynlib: GLExtLib, 223 | importc: "gdk_gl_pbuffer_attrib_get_type".} 224 | proc TYPE_GL_PBUFFER_ATTRIB*(): GType{.cdecl, dynlib: GLExtLib, importc: "gdk_gl_pbuffer_attrib_get_type".} 225 | proc gl_event_mask_get_type*(): GType{.cdecl, dynlib: GLExtLib, 226 | importc: "gdk_gl_event_mask_get_type".} 227 | proc TYPE_GL_EVENT_MASK*(): GType{.cdecl, dynlib: GLExtLib, 228 | importc: "gdk_gl_event_mask_get_type".} 229 | proc gl_event_type_get_type*(): GType{.cdecl, dynlib: GLExtLib, 230 | importc: "gdk_gl_event_type_get_type".} 231 | proc TYPE_GL_EVENT_TYPE*(): GType{.cdecl, dynlib: GLExtLib, 232 | importc: "gdk_gl_event_type_get_type".} 233 | proc gl_drawable_type_get_type*(): GType{.cdecl, dynlib: GLExtLib, 234 | importc: "gdk_gl_drawable_type_get_type".} 235 | proc TYPE_GL_DRAWABLE_TYPE*(): GType{.cdecl, dynlib: GLExtLib, 236 | importc: "gdk_gl_drawable_type_get_type".} 237 | proc gl_config_mode_get_type*(): GType{.cdecl, dynlib: GLExtLib, 238 | importc: "gdk_gl_config_mode_get_type".} 239 | proc TYPE_GL_CONFIG_MODE*(): GType{.cdecl, dynlib: GLExtLib, 240 | importc: "gdk_gl_config_mode_get_type".} 241 | proc gl_parse_args*(argc: var int32, argv: ptr cstringArray): gboolean{.cdecl, 242 | dynlib: GLExtLib, importc: "gdk_gl_parse_args".} 243 | proc gl_init_check*(argc: var int32, argv: ptr cstringArray): gboolean{.cdecl, 244 | dynlib: GLExtLib, importc: "gdk_gl_init_check".} 245 | proc gl_init*(argc: var int32, argv: ptr cstringArray){.cdecl, dynlib: GLExtLib, 246 | importc: "gdk_gl_init".} 247 | proc gl_query_gl_extension*(extension: cstring): gboolean{.cdecl, 248 | dynlib: GLExtLib, importc: "gdk_gl_query_gl_extension".} 249 | proc gl_get_proc_address*(proc_name: cstring): TGLProc{.cdecl, dynlib: GLExtLib, 250 | importc: "gdk_gl_get_proc_address".} 251 | const 252 | bm_TGdkGLConfig_is_rgba* = 1 shl 0 253 | bp_TGdkGLConfig_is_rgba* = 0 254 | bm_TGdkGLConfig_is_double_buffered* = 1 shl 1 255 | bp_TGdkGLConfig_is_double_buffered* = 1 256 | bm_TGdkGLConfig_as_single_mode* = 1 shl 2 257 | bp_TGdkGLConfig_as_single_mode* = 2 258 | bm_TGdkGLConfig_is_stereo* = 1 shl 3 259 | bp_TGdkGLConfig_is_stereo* = 3 260 | bm_TGdkGLConfig_has_alpha* = 1 shl 4 261 | bp_TGdkGLConfig_has_alpha* = 4 262 | bm_TGdkGLConfig_has_depth_buffer* = 1 shl 5 263 | bp_TGdkGLConfig_has_depth_buffer* = 5 264 | bm_TGdkGLConfig_has_stencil_buffer* = 1 shl 6 265 | bp_TGdkGLConfig_has_stencil_buffer* = 6 266 | bm_TGdkGLConfig_has_accum_buffer* = 1 shl 7 267 | bp_TGdkGLConfig_has_accum_buffer* = 7 268 | 269 | const 270 | GL_MODE_RGB* = 0 271 | GL_MODE_RGBA* = 0 272 | GL_MODE_INDEX* = 1 shl 0 273 | GL_MODE_SINGLE* = 0 274 | GL_MODE_DOUBLE* = 1 shl 1 275 | GL_MODE_STEREO* = 1 shl 2 276 | GL_MODE_ALPHA* = 1 shl 3 277 | GL_MODE_DEPTH* = 1 shl 4 278 | GL_MODE_STENCIL* = 1 shl 5 279 | GL_MODE_ACCUM* = 1 shl 6 280 | GL_MODE_MULTISAMPLE* = 1 shl 7 281 | 282 | type 283 | TGLConfigMode* = int32 284 | PGLConfigMode* = ptr TGLConfigMode 285 | 286 | proc TYPE_GL_CONFIG*(): GType 287 | proc GL_CONFIG*(anObject: pointer): PGLConfig 288 | proc GL_CONFIG_CLASS*(klass: pointer): PGLConfigClass 289 | proc IS_GL_CONFIG*(anObject: pointer): bool 290 | proc IS_GL_CONFIG_CLASS*(klass: pointer): bool 291 | proc GL_CONFIG_GET_CLASS*(obj: pointer): PGLConfigClass 292 | proc gl_config_get_type*(): GType{.cdecl, dynlib: GLExtLib, 293 | importc: "gdk_gl_config_get_type".} 294 | proc get_screen*(glconfig: PGLConfig): PScreen{.cdecl, 295 | dynlib: GLExtLib, importc: "gdk_gl_config_get_screen".} 296 | proc get_attrib*(glconfig: PGLConfig, attribute: int, value: var cint): gboolean{. 297 | cdecl, dynlib: GLExtLib, importc: "gdk_gl_config_get_attrib".} 298 | proc get_colormap*(glconfig: PGLConfig): PColormap{.cdecl, 299 | dynlib: GLExtLib, importc: "gdk_gl_config_get_colormap".} 300 | proc get_visual*(glconfig: PGLConfig): PVisual{.cdecl, 301 | dynlib: GLExtLib, importc: "gdk_gl_config_get_visual".} 302 | proc get_depth*(glconfig: PGLConfig): gint{.cdecl, dynlib: GLExtLib, 303 | importc: "gdk_gl_config_get_depth".} 304 | proc get_layer_plane*(glconfig: PGLConfig): gint{.cdecl, 305 | dynlib: GLExtLib, importc: "gdk_gl_config_get_layer_plane".} 306 | proc get_n_aux_buffers*(glconfig: PGLConfig): gint{.cdecl, 307 | dynlib: GLExtLib, importc: "gdk_gl_config_get_n_aux_buffers".} 308 | proc get_n_sample_buffers*(glconfig: PGLConfig): gint{.cdecl, 309 | dynlib: GLExtLib, importc: "gdk_gl_config_get_n_sample_buffers".} 310 | proc is_rgba*(glconfig: PGLConfig): gboolean{.cdecl, dynlib: GLExtLib, 311 | importc: "gdk_gl_config_is_rgba".} 312 | proc is_double_buffered*(glconfig: PGLConfig): gboolean{.cdecl, 313 | dynlib: GLExtLib, importc: "gdk_gl_config_is_double_buffered".} 314 | proc is_stereo*(glconfig: PGLConfig): gboolean{.cdecl, 315 | dynlib: GLExtLib, importc: "gdk_gl_config_is_stereo".} 316 | proc has_alpha*(glconfig: PGLConfig): gboolean{.cdecl, 317 | dynlib: GLExtLib, importc: "gdk_gl_config_has_alpha".} 318 | proc has_depth_buffer*(glconfig: PGLConfig): gboolean{.cdecl, 319 | dynlib: GLExtLib, importc: "gdk_gl_config_has_depth_buffer".} 320 | proc has_stencil_buffer*(glconfig: PGLConfig): gboolean{.cdecl, 321 | dynlib: GLExtLib, importc: "gdk_gl_config_has_stencil_buffer".} 322 | proc has_accum_buffer*(glconfig: PGLConfig): gboolean{.cdecl, 323 | dynlib: GLExtLib, importc: "gdk_gl_config_has_accum_buffer".} 324 | proc TYPE_GL_CONTEXT*(): GType 325 | proc GL_CONTEXT*(anObject: pointer): PGLContext 326 | proc GL_CONTEXT_CLASS*(klass: pointer): PGLContextClass 327 | proc IS_GL_CONTEXT*(anObject: pointer): bool 328 | proc IS_GL_CONTEXT_CLASS*(klass: pointer): bool 329 | proc GL_CONTEXT_GET_CLASS*(obj: pointer): PGLContextClass 330 | proc gl_context_get_type*(): GType{.cdecl, dynlib: GLExtLib, 331 | importc: "gdk_gl_context_get_type".} 332 | proc context_new*(gldrawable: PGLDrawable, share_list: PGLContext, 333 | direct: gboolean, render_type: int32): PGLContext{.cdecl, 334 | dynlib: GLExtLib, importc: "gdk_gl_context_new".} 335 | proc destroy*(glcontext: PGLContext){.cdecl, dynlib: GLExtLib, 336 | importc: "gdk_gl_context_destroy".} 337 | proc copy*(glcontext: PGLContext, src: PGLContext, mask: int32): gboolean{. 338 | cdecl, dynlib: GLExtLib, importc: "gdk_gl_context_copy".} 339 | proc get_gl_drawable*(glcontext: PGLContext): PGLDrawable{.cdecl, 340 | dynlib: GLExtLib, importc: "gdk_gl_context_get_gl_drawable".} 341 | proc get_gl_config*(glcontext: PGLContext): PGLConfig{.cdecl, 342 | dynlib: GLExtLib, importc: "gdk_gl_context_get_gl_config".} 343 | proc get_share_list*(glcontext: PGLContext): PGLContext{.cdecl, 344 | dynlib: GLExtLib, importc: "gdk_gl_context_get_share_list".} 345 | proc is_direct*(glcontext: PGLContext): gboolean{.cdecl, 346 | dynlib: GLExtLib, importc: "gdk_gl_context_is_direct".} 347 | proc get_render_type*(glcontext: PGLContext): int32{.cdecl, 348 | dynlib: GLExtLib, importc: "gdk_gl_context_get_render_type".} 349 | proc gl_context_get_current*(): PGLContext{.cdecl, dynlib: GLExtLib, 350 | importc: "gdk_gl_context_get_current".} 351 | proc TYPE_GL_DRAWABLE*(): GType 352 | proc GL_DRAWABLE*(inst: pointer): PGLDrawable 353 | proc GL_DRAWABLE_CLASS*(vtable: pointer): PGLDrawableClass 354 | proc IS_GL_DRAWABLE*(inst: pointer): bool 355 | proc IS_GL_DRAWABLE_CLASS*(vtable: pointer): bool 356 | proc GL_DRAWABLE_GET_CLASS*(inst: pointer): PGLDrawableClass 357 | proc gl_drawable_get_type*(): GType{.cdecl, dynlib: GLExtLib, 358 | importc: "gdk_gl_drawable_get_type".} 359 | proc make_current*(gldrawable: PGLDrawable, glcontext: PGLContext): gboolean{. 360 | cdecl, dynlib: GLExtLib, importc: "gdk_gl_drawable_make_current".} 361 | proc is_double_buffered*(gldrawable: PGLDrawable): gboolean{.cdecl, 362 | dynlib: GLExtLib, importc: "gdk_gl_drawable_is_double_buffered".} 363 | proc swap_buffers*(gldrawable: PGLDrawable){.cdecl, 364 | dynlib: GLExtLib, importc: "gdk_gl_drawable_swap_buffers".} 365 | proc wait_gl*(gldrawable: PGLDrawable){.cdecl, dynlib: GLExtLib, 366 | importc: "gdk_gl_drawable_wait_gl".} 367 | proc wait_gdk*(gldrawable: PGLDrawable){.cdecl, dynlib: GLExtLib, 368 | importc: "gdk_gl_drawable_wait_gdk".} 369 | proc gl_begin*(gldrawable: PGLDrawable, glcontext: PGLContext): gboolean{. 370 | cdecl, dynlib: GLExtLib, importc: "gdk_gl_drawable_gl_begin".} 371 | proc gl_end*(gldrawable: PGLDrawable){.cdecl, dynlib: GLExtLib, 372 | importc: "gdk_gl_drawable_gl_end".} 373 | proc get_gl_config*(gldrawable: PGLDrawable): PGLConfig{.cdecl, 374 | dynlib: GLExtLib, importc: "gdk_gl_drawable_get_gl_config".} 375 | proc get_size*(gldrawable: PGLDrawable, width, height: PGInt){. 376 | cdecl, dynlib: GLExtLib, importc: "gdk_gl_drawable_get_size".} 377 | proc gl_drawable_get_current*(): PGLDrawable{.cdecl, dynlib: GLExtLib, 378 | importc: "gdk_gl_drawable_get_current".} 379 | proc TYPE_GL_PIXMAP*(): GType 380 | proc GL_PIXMAP*(anObject: pointer): PGLPixmap 381 | proc GL_PIXMAP_CLASS*(klass: pointer): PGLPixmapClass 382 | proc IS_GL_PIXMAP*(anObject: pointer): bool 383 | proc IS_GL_PIXMAP_CLASS*(klass: pointer): bool 384 | proc GL_PIXMAP_GET_CLASS*(obj: pointer): PGLPixmapClass 385 | proc gl_pixmap_get_type*(): GType{.cdecl, dynlib: GLExtLib, 386 | importc: "gdk_gl_pixmap_get_type".} 387 | proc pixmap_new*(glconfig: PGLConfig, pixmap: PPixmap, attrib_list: ptr int32): PGLPixmap{. 388 | cdecl, dynlib: GLExtLib, importc: "gdk_gl_pixmap_new".} 389 | proc destroy*(glpixmap: PGLPixmap){.cdecl, dynlib: GLExtLib, 390 | importc: "gdk_gl_pixmap_destroy".} 391 | proc get_pixmap*(glpixmap: PGLPixmap): PPixmap{.cdecl, 392 | dynlib: GLExtLib, importc: "gdk_gl_pixmap_get_pixmap".} 393 | proc set_gl_capability*(pixmap: PPixmap, glconfig: PGLConfig, 394 | attrib_list: ptr int32): PGLPixmap{.cdecl, 395 | dynlib: GLExtLib, importc: "gdk_pixmap_set_gl_capability".} 396 | proc unset_gl_capability*(pixmap: PPixmap){.cdecl, dynlib: GLExtLib, 397 | importc: "gdk_pixmap_unset_gl_capability".} 398 | proc is_gl_capable*(pixmap: PPixmap): gboolean{.cdecl, dynlib: GLExtLib, 399 | importc: "gdk_pixmap_is_gl_capable".} 400 | proc get_gl_pixmap*(pixmap: PPixmap): PGLPixmap{.cdecl, dynlib: GLExtLib, 401 | importc: "gdk_pixmap_get_gl_pixmap".} 402 | proc get_gl_drawable*(pixmap: PPixmap): PGLDrawable 403 | proc TYPE_GL_WINDOW*(): GType 404 | proc GL_WINDOW*(anObject: pointer): PGLWindow 405 | proc GL_WINDOW_CLASS*(klass: pointer): PGLWindowClass 406 | proc IS_GL_WINDOW*(anObject: pointer): bool 407 | proc IS_GL_WINDOW_CLASS*(klass: pointer): bool 408 | proc GL_WINDOW_GET_CLASS*(obj: pointer): PGLWindowClass 409 | proc gl_window_get_type*(): GType{.cdecl, dynlib: GLExtLib, 410 | importc: "gdk_gl_window_get_type".} 411 | proc window_new*(glconfig: PGLConfig, window: PWindow, attrib_list: ptr int32): PGLWindow{. 412 | cdecl, dynlib: GLExtLib, importc: "gdk_gl_window_new".} 413 | proc destroy*(glwindow: PGLWindow){.cdecl, dynlib: GLExtLib, 414 | importc: "gdk_gl_window_destroy".} 415 | proc get_window*(glwindow: PGLWindow): PWindow{.cdecl, 416 | dynlib: GLExtLib, importc: "gdk_gl_window_get_window".} 417 | proc set_gl_capability*(window: PWindow, glconfig: PGLConfig, 418 | attrib_list: ptr int32): PGLWindow{.cdecl, 419 | dynlib: GLExtLib, importc: "gdk_window_set_gl_capability".} 420 | proc unset_gl_capability*(window: PWindow){.cdecl, dynlib: GLExtLib, 421 | importc: "gdk_window_unset_gl_capability".} 422 | proc is_gl_capable*(window: PWindow): gboolean{.cdecl, dynlib: GLExtLib, 423 | importc: "gdk_window_is_gl_capable".} 424 | proc get_gl_window*(window: PWindow): PGLWindow{.cdecl, dynlib: GLExtLib, 425 | importc: "gdk_window_get_gl_window".} 426 | proc get_gl_drawable*(window: PWindow): PGLDrawable 427 | proc gl_draw_cube*(solid: gboolean, size: float64){.cdecl, dynlib: GLExtLib, 428 | importc: "gdk_gl_draw_cube".} 429 | proc gl_draw_sphere*(solid: gboolean, radius: float64, slices: int32, 430 | stacks: int32){.cdecl, dynlib: GLExtLib, 431 | importc: "gdk_gl_draw_sphere".} 432 | proc gl_draw_cone*(solid: gboolean, base: float64, height: float64, 433 | slices: int32, stacks: int32){.cdecl, dynlib: GLExtLib, 434 | importc: "gdk_gl_draw_cone".} 435 | proc gl_draw_torus*(solid: gboolean, inner_radius: float64, 436 | outer_radius: float64, nsides: int32, rings: int32){.cdecl, 437 | dynlib: GLExtLib, importc: "gdk_gl_draw_torus".} 438 | proc gl_draw_tetrahedron*(solid: gboolean){.cdecl, dynlib: GLExtLib, 439 | importc: "gdk_gl_draw_tetrahedron".} 440 | proc gl_draw_octahedron*(solid: gboolean){.cdecl, dynlib: GLExtLib, 441 | importc: "gdk_gl_draw_octahedron".} 442 | proc gl_draw_dodecahedron*(solid: gboolean){.cdecl, dynlib: GLExtLib, 443 | importc: "gdk_gl_draw_dodecahedron".} 444 | proc gl_draw_icosahedron*(solid: gboolean){.cdecl, dynlib: GLExtLib, 445 | importc: "gdk_gl_draw_icosahedron".} 446 | proc gl_draw_teapot*(solid: gboolean, scale: float64){.cdecl, dynlib: GLExtLib, 447 | importc: "gdk_gl_draw_teapot".} 448 | proc HEADER_GDKGLEXT_CHECK_VERSION*(major, minor, micro: guint): bool = 449 | result = (HEADER_GDKGLEXT_MAJOR_VERSION > major) or 450 | ((HEADER_GDKGLEXT_MAJOR_VERSION == major) and 451 | (HEADER_GDKGLEXT_MINOR_VERSION > minor)) or 452 | ((HEADER_GDKGLEXT_MAJOR_VERSION == major) and 453 | (HEADER_GDKGLEXT_MINOR_VERSION == minor) and 454 | (HEADER_GDKGLEXT_MICRO_VERSION >= micro)) 455 | 456 | proc TYPE_GL_CONFIG*(): GType = 457 | result = gl_config_get_type() 458 | 459 | proc GL_CONFIG*(anObject: pointer): PGLConfig = 460 | result = cast[PGLConfig](G_TYPE_CHECK_INSTANCE_CAST(anObject, TYPE_GL_CONFIG())) 461 | 462 | proc GL_CONFIG_CLASS*(klass: pointer): PGLConfigClass = 463 | result = cast[PGLConfigClass](G_TYPE_CHECK_CLASS_CAST(klass, TYPE_GL_CONFIG())) 464 | 465 | proc IS_GL_CONFIG*(anObject: pointer): bool = 466 | result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_GL_CONFIG()) 467 | 468 | proc IS_GL_CONFIG_CLASS*(klass: pointer): bool = 469 | result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_GL_CONFIG()) 470 | 471 | proc GL_CONFIG_GET_CLASS*(obj: pointer): PGLConfigClass = 472 | result = cast[PGLConfigClass](G_TYPE_INSTANCE_GET_CLASS(obj, TYPE_GL_CONFIG())) 473 | 474 | proc TYPE_GL_CONTEXT*(): GType = 475 | result = gl_context_get_type() 476 | 477 | proc GL_CONTEXT*(anObject: pointer): PGLContext = 478 | result = cast[PGLContext](G_TYPE_CHECK_INSTANCE_CAST(anObject, 479 | TYPE_GL_CONTEXT())) 480 | 481 | proc GL_CONTEXT_CLASS*(klass: pointer): PGLContextClass = 482 | result = cast[PGLContextClass](G_TYPE_CHECK_CLASS_CAST(klass, 483 | TYPE_GL_CONTEXT())) 484 | 485 | proc IS_GL_CONTEXT*(anObject: pointer): bool = 486 | result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_GL_CONTEXT()) 487 | 488 | proc IS_GL_CONTEXT_CLASS*(klass: pointer): bool = 489 | result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_GL_CONTEXT()) 490 | 491 | proc GL_CONTEXT_GET_CLASS*(obj: pointer): PGLContextClass = 492 | result = cast[PGLContextClass](G_TYPE_INSTANCE_GET_CLASS(obj, 493 | TYPE_GL_CONTEXT())) 494 | 495 | proc TYPE_GL_DRAWABLE*(): GType = 496 | result = gl_drawable_get_type() 497 | 498 | proc GL_DRAWABLE*(inst: pointer): PGLDrawable = 499 | result = cast[PGLDrawable](G_TYPE_CHECK_INSTANCE_CAST(inst, TYPE_GL_DRAWABLE())) 500 | 501 | proc GL_DRAWABLE_CLASS*(vtable: pointer): PGLDrawableClass = 502 | result = cast[PGLDrawableClass](G_TYPE_CHECK_CLASS_CAST(vtable, 503 | TYPE_GL_DRAWABLE())) 504 | 505 | proc IS_GL_DRAWABLE*(inst: pointer): bool = 506 | result = G_TYPE_CHECK_INSTANCE_TYPE(inst, TYPE_GL_DRAWABLE()) 507 | 508 | proc IS_GL_DRAWABLE_CLASS*(vtable: pointer): bool = 509 | result = G_TYPE_CHECK_CLASS_TYPE(vtable, TYPE_GL_DRAWABLE()) 510 | 511 | proc GL_DRAWABLE_GET_CLASS*(inst: pointer): PGLDrawableClass = 512 | result = cast[PGLDrawableClass](G_TYPE_INSTANCE_GET_INTERFACE(inst, 513 | TYPE_GL_DRAWABLE())) 514 | 515 | proc TYPE_GL_PIXMAP*(): GType = 516 | result = gl_pixmap_get_type() 517 | 518 | proc GL_PIXMAP*(anObject: pointer): PGLPixmap = 519 | result = cast[PGLPixmap](G_TYPE_CHECK_INSTANCE_CAST(anObject, TYPE_GL_PIXMAP())) 520 | 521 | proc GL_PIXMAP_CLASS*(klass: pointer): PGLPixmapClass = 522 | result = cast[PGLPixmapClass](G_TYPE_CHECK_CLASS_CAST(klass, TYPE_GL_PIXMAP())) 523 | 524 | proc IS_GL_PIXMAP*(anObject: pointer): bool = 525 | result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_GL_PIXMAP()) 526 | 527 | proc IS_GL_PIXMAP_CLASS*(klass: pointer): bool = 528 | result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_GL_PIXMAP()) 529 | 530 | proc GL_PIXMAP_GET_CLASS*(obj: pointer): PGLPixmapClass = 531 | result = cast[PGLPixmapClass](G_TYPE_INSTANCE_GET_CLASS(obj, TYPE_GL_PIXMAP())) 532 | 533 | proc get_gl_drawable*(pixmap: PPixmap): PGLDrawable = 534 | result = GL_DRAWABLE(get_gl_pixmap(pixmap)) 535 | 536 | proc TYPE_GL_WINDOW*(): GType = 537 | result = gl_window_get_type() 538 | 539 | proc GL_WINDOW*(anObject: pointer): PGLWindow = 540 | result = cast[PGLWindow](G_TYPE_CHECK_INSTANCE_CAST(anObject, TYPE_GL_WINDOW())) 541 | 542 | proc GL_WINDOW_CLASS*(klass: pointer): PGLWindowClass = 543 | result = cast[PGLWindowClass](G_TYPE_CHECK_CLASS_CAST(klass, TYPE_GL_WINDOW())) 544 | 545 | proc IS_GL_WINDOW*(anObject: pointer): bool = 546 | result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_GL_WINDOW()) 547 | 548 | proc IS_GL_WINDOW_CLASS*(klass: pointer): bool = 549 | result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_GL_WINDOW()) 550 | 551 | proc GL_WINDOW_GET_CLASS*(obj: pointer): PGLWindowClass = 552 | result = cast[PGLWindowClass](G_TYPE_INSTANCE_GET_CLASS(obj, TYPE_GL_WINDOW())) 553 | 554 | proc get_gl_drawable*(window: PWindow): PGLDrawable = 555 | result = GL_DRAWABLE(get_gl_window(window)) 556 | {.pop.} 557 | -------------------------------------------------------------------------------- /src/gtkglext.nim: -------------------------------------------------------------------------------- 1 | {.deadCodeElim: on.} 2 | {.push gcsafe.} 3 | import 4 | Glib2, gdk2, gtk2, GdkGLExt 5 | 6 | when defined(windows): 7 | const 8 | GLExtLib* = "libgtkglext-win32-1.0-0.dll" 9 | elif defined(macosx): 10 | const 11 | GLExtLib* = "libgtkglext-x11-1.0.dylib" 12 | else: 13 | const 14 | GLExtLib* = "libgtkglext-x11-1.0.so" 15 | 16 | const 17 | HEADER_GTKGLEXT_MAJOR_VERSION* = 1 18 | HEADER_GTKGLEXT_MINOR_VERSION* = 0 19 | HEADER_GTKGLEXT_MICRO_VERSION* = 6 20 | HEADER_GTKGLEXT_INTERFACE_AGE* = 4 21 | HEADER_GTKGLEXT_BINARY_AGE* = 6 22 | 23 | proc gl_parse_args*(argc: ptr int32, argv: PPPChar): gboolean{.cdecl, 24 | dynlib: GLExtLib, importc: "gtk_gl_parse_args".} 25 | proc gl_init_check*(argc: ptr int32, argv: PPPChar): gboolean{.cdecl, 26 | dynlib: GLExtLib, importc: "gtk_gl_init_check".} 27 | proc gl_init*(argc: ptr int32, argv: PPPChar){.cdecl, dynlib: GLExtLib, 28 | importc: "gtk_gl_init".} 29 | proc set_gl_capability*(widget: PWidget, glconfig: PGLConfig, 30 | share_list: PGLContext, direct: gboolean, 31 | render_type: int): gboolean{.cdecl, 32 | dynlib: GLExtLib, importc: "gtk_widget_set_gl_capability".} 33 | proc is_gl_capable*(widget: PWidget): gboolean{.cdecl, dynlib: GLExtLib, 34 | importc: "gtk_widget_is_gl_capable".} 35 | proc get_gl_config*(widget: PWidget): PGLConfig{.cdecl, 36 | dynlib: GLExtLib, importc: "gtk_widget_get_gl_config".} 37 | proc create_gl_context*(widget: PWidget, share_list: PGLContext, 38 | direct: gboolean, render_type: int): PGLContext{. 39 | cdecl, dynlib: GLExtLib, importc: "gtk_widget_create_gl_context".} 40 | proc get_gl_context*(widget: PWidget): PGLContext{.cdecl, 41 | dynlib: GLExtLib, importc: "gtk_widget_get_gl_context".} 42 | proc get_gl_window*(widget: PWidget): PGLWindow{.cdecl, 43 | dynlib: GLExtLib, importc: "gtk_widget_get_gl_window".} 44 | 45 | proc HEADER_GTKGLEXT_CHECK_VERSION*(major, minor, micro: guint): bool = 46 | result = (HEADER_GTKGLEXT_MAJOR_VERSION > major) or 47 | ((HEADER_GTKGLEXT_MAJOR_VERSION == major) and 48 | (HEADER_GTKGLEXT_MINOR_VERSION > minor)) or 49 | ((HEADER_GTKGLEXT_MAJOR_VERSION == major) and 50 | (HEADER_GTKGLEXT_MINOR_VERSION == minor) and 51 | (HEADER_GTKGLEXT_MICRO_VERSION >= micro)) 52 | 53 | proc get_gl_drawable*(widget: PWidget): PGLDrawable = 54 | result = GL_DRAWABLE(get_gl_window(widget)) 55 | {.pop.} 56 | -------------------------------------------------------------------------------- /src/gtkhtml.nim: -------------------------------------------------------------------------------- 1 | {.deadCodeElim: on.} 2 | {.push gcsafe.} 3 | import 4 | gtk2, glib2, atk, pango, gdk2pixbuf, gdk2 5 | 6 | when defined(windows): 7 | const 8 | htmllib = "libgtkhtml-win32-2.0-0.dll" 9 | elif defined(macosx): 10 | const 11 | htmllib = "libgtkhtml-2.dylib" 12 | else: 13 | const 14 | htmllib = "libgtkhtml-2.so" 15 | const 16 | DOM_UNSPECIFIED_EVENT_TYPE_ERR* = 0 17 | DOM_INDEX_SIZE_ERR* = 1 18 | DOM_DOMSTRING_SIZE_ERR* = 2 19 | DOM_HIERARCHY_REQUEST_ERR* = 3 20 | DOM_WRONG_DOCUMENT_ERR* = 4 21 | DOM_INVALID_CHARACTER_ERR* = 5 22 | DOM_NO_DATA_ALLOWED_ERR* = 6 23 | DOM_NO_MODIFICATION_ALLOWED_ERR* = 7 24 | DOM_NOT_FOUND_ERR* = 8 25 | DOM_NOT_SUPPORTED_ERR* = 9 26 | DOM_INUSE_ATTRIBUTE_ERR* = 10 27 | DOM_INVALID_STATE_ERR* = 11 28 | DOM_SYNTAX_ERR* = 12 29 | DOM_INVALID_MODIFICATION_ERR* = 13 30 | DOM_NAMESPACE_ERR* = 14 31 | DOM_INVALID_ACCESS_ERR* = 15 32 | DOM_NO_EXCEPTION* = 255 33 | DOM_ELEMENT_NODE* = 1 34 | DOM_ATTRIBUTE_NODE* = 2 35 | DOM_TEXT_NODE* = 3 36 | DOM_CDATA_SECTION_NODE* = 4 37 | DOM_ENTITY_REFERENCE_NODE* = 5 38 | DOM_ENTITY_NODE* = 6 39 | DOM_PROCESSING_INSTRUCTION_NODE* = 7 40 | DOM_COMMENT_NODE* = 8 41 | DOM_DOCUMENT_NODE* = 9 42 | DOM_DOCUMENT_TYPE_NODE* = 10 43 | DOM_DOCUMENT_FRAGMENT_NODE* = 11 44 | DOM_NOTATION_NODE* = 12 45 | bm_HtmlFontSpecification_weight* = 0x0000000F 46 | bp_HtmlFontSpecification_weight* = 0 47 | bm_HtmlFontSpecification_style* = 0x00000030 48 | bp_HtmlFontSpecification_style* = 4 49 | bm_HtmlFontSpecification_variant* = 0x000000C0 50 | bp_HtmlFontSpecification_variant* = 6 51 | bm_HtmlFontSpecification_stretch* = 0x00000F00 52 | bp_HtmlFontSpecification_stretch* = 8 53 | bm_HtmlFontSpecification_decoration* = 0x00007000 54 | bp_HtmlFontSpecification_decoration* = 12 55 | 56 | type 57 | TDomString* = gchar 58 | PDomString* = cstring 59 | TDomBoolean* = gboolean 60 | TDomException* = gushort 61 | TDomTimeStamp* = guint64 62 | PDomNode* = ptr TDomNode 63 | TDomNode* = object of TGObject 64 | xmlnode*: pointer 65 | style*: pointer 66 | 67 | PDomException* = ptr TDomException 68 | 69 | PDomNodeClass* = ptr TDomNodeClass 70 | TDomNodeClass* = object of TGObjectClass 71 | `get_nodeName`*: proc (node: PDomNode): PDomString{.cdecl.} 72 | `get_nodeValue`*: proc (node: PDomNode, exc: PDomException): PDomString{. 73 | cdecl.} 74 | `set_nodeValue`*: proc (node: PDomNode, value: PDomString, 75 | exc: PDomException): PDomString{.cdecl.} 76 | 77 | PDomDocument* = ptr TDomDocument 78 | TDomDocument*{.final, pure.} = object 79 | parent*: PDomNode 80 | iterators*: PGSList 81 | 82 | PDomDocumentClass* = ptr TDomDocumentClass 83 | TDomDocumentClass*{.final, pure.} = object 84 | parent_class*: PDomNodeClass 85 | 86 | PHtmlFocusIterator* = ptr THtmlFocusIterator 87 | THtmlFocusIterator* = object of TGObject 88 | document*: PDomDocument 89 | current_node*: PDomNode 90 | 91 | PHtmlFocusIteratorClass* = ptr THtmlFocusIteratorClass 92 | THtmlFocusIteratorClass* = object of TGObjectClass 93 | THtmlParserType* = enum 94 | HTML_PARSER_TYPE_HTML, HTML_PARSER_TYPE_XML 95 | PHtmlParser* = ptr THtmlParser 96 | THtmlParser* = object of TGObject 97 | parser_type*: THtmlParserType 98 | document*: PHtmlDocument 99 | stream*: PHtmlStream 100 | xmlctxt*: pointer 101 | res*: int32 102 | chars*: array[0..9, char] 103 | blocking*: gboolean 104 | blocking_node*: PDomNode 105 | 106 | PHtmlParserClass* = ptr THtmlParserClass 107 | THtmlParserClass* = object of gtk2.TObjectClass 108 | done_parsing*: proc (parser: PHtmlParser){.cdecl.} 109 | new_node*: proc (parser: PHtmlParser, node: PDomNode) 110 | parsed_document_node*: proc (parser: PHtmlParser, document: PDomDocument) 111 | 112 | PHtmlStream* = ptr THtmlStream 113 | THtmlStreamCloseFunc* = proc (stream: PHtmlStream, user_data: gpointer){.cdecl.} 114 | THtmlStreamWriteFunc* = proc (stream: PHtmlStream, buffer: cstring, 115 | size: guint, user_data: gpointer){.cdecl.} 116 | THtmlStreamCancelFunc* = proc (stream: PHtmlStream, user_data: gpointer, 117 | cancel_data: gpointer){.cdecl.} 118 | THtmlStream* = object of TGObject 119 | write_func*: THtmlStreamWriteFunc 120 | close_func*: THtmlStreamCloseFunc 121 | cancel_func*: THtmlStreamCancelFunc 122 | user_data*: gpointer 123 | cancel_data*: gpointer 124 | written*: gint 125 | mime_type*: cstring 126 | 127 | PHtmlStreamClass* = ptr THtmlStreamClass 128 | THtmlStreamClass* = object of TGObjectClass 129 | THtmlStreamBufferCloseFunc* = proc (str: cstring, len: gint, 130 | user_data: gpointer){.cdecl.} 131 | PHtmlContext* = ptr THtmlContext 132 | THtmlContext* = object of TGObject 133 | documents*: PGSList 134 | standard_font*: PHtmlFontSpecification 135 | fixed_font*: PHtmlFontSpecification 136 | debug_painting*: gboolean 137 | 138 | PHtmlFontSpecification* = ptr THtmlFontSpecification 139 | THtmlFontSpecification {.final, pure.} = object 140 | 141 | PHtmlContextClass* = ptr THtmlContextClass 142 | THtmlContextClass* = object of TGObjectClass 143 | THtmlDocumentState* = enum 144 | HTML_DOCUMENT_STATE_DONE, HTML_DOCUMENT_STATE_PARSING 145 | PHtmlDocument* = ptr THtmlDocument 146 | THtmlDocument* = object of TGObject 147 | stylesheets*: PGSList 148 | current_stream*: PHtmlStream 149 | state*: THtmlDocumentState 150 | 151 | PHtmlDocumentClass* = ptr THtmlDocumentClass 152 | THtmlDocumentClass* = object of TGObjectClass 153 | request_url*: proc (document: PHtmlDocument, url: cstring, 154 | stream: PHtmlStream){.cdecl.} 155 | link_clicked*: proc (document: PHtmlDocument, url: cstring){.cdecl.} 156 | set_base*: proc (document: PHtmlDocument, url: cstring){.cdecl.} 157 | title_changed*: proc (document: PHtmlDocument, new_title: cstring){.cdecl.} 158 | submit*: proc (document: PHtmlDocument, `method`: cstring, url: cstring, 159 | encoding: cstring){.cdecl.} 160 | 161 | PHtmlView* = ptr THtmlView 162 | THtmlView* = object of gtk2.TLayout 163 | document*: PHtmlDocument 164 | node_table*: PGHashTable 165 | relayout_idle_id*: guint 166 | relayout_timeout_id*: guint 167 | mouse_down_x*: gint 168 | mouse_down_y*: gint 169 | mouse_detail*: gint 170 | sel_start_ypos*: gint 171 | sel_start_index*: gint 172 | sel_end_ypos*: gint 173 | sel_end_index*: gint 174 | sel_flag*: gboolean 175 | sel_backwards*: gboolean 176 | sel_start_found*: gboolean 177 | sel_list*: PGSList 178 | jump_to_anchor*: cstring 179 | magnification*: gdouble 180 | magnification_modified*: gboolean 181 | on_url*: gboolean 182 | 183 | PHtmlViewClass* = ptr THtmlViewClass 184 | THtmlViewClass* = object of gtk2.TLayoutClass 185 | move_cursor*: proc (html_view: PHtmlView, step: TMovementStep, count: gint, 186 | extend_selection: gboolean){.cdecl.} 187 | on_url*: proc (html_view: PHtmlView, url: cstring) 188 | activate*: proc (html_view: PHtmlView) 189 | move_focus_out*: proc (html_view: PHtmlView, direction: TDirectionType) 190 | 191 | PDomNodeList* = ptr TDomNodeList 192 | TDomNodeList {.pure, final.} = object 193 | 194 | PDomNamedNodeMap* = ptr TDomNamedNodeMap 195 | TDomNamedNodeMap {.pure, final.} = object 196 | 197 | PDomDocumentType* = ptr TDomDocumentType 198 | TDomDocumentType {.pure, final.} = object 199 | 200 | PDomElement* = ptr TDomElement 201 | TDomElement = object of TDomNode 202 | 203 | PDomText* = ptr TDomText 204 | TDomText = object of TDomNode 205 | 206 | PDomComment* = ptr TDomComment 207 | TDomComment = object of TDomNode 208 | 209 | THtmlBox {.pure, final.} = object 210 | PHtmlBox* = ptr THtmlBox 211 | 212 | 213 | proc DOM_TYPE_NODE*(): GType 214 | proc DOM_NODE*(theobject: pointer): PDomNode 215 | proc DOM_NODE_CLASS*(klass: pointer): PDomNodeClass 216 | proc DOM_IS_NODE*(theobject: pointer): bool 217 | proc DOM_IS_NODE_CLASS*(klass: pointer): bool 218 | proc DOM_NODE_GET_CLASS*(obj: pointer): int32 219 | proc dom_node_get_type*(): GType{.cdecl, dynlib: htmllib, 220 | importc: "dom_node_get_type".} 221 | proc dom_Node_mkref*(node: pointer): PDomNode{.cdecl, dynlib: htmllib, 222 | importc: "dom_Node_mkref".} 223 | proc get_childNodes*(node: PDomNode): PDomNodeList{.cdecl, 224 | dynlib: htmllib, importc: "dom_Node__get_childNodes".} 225 | proc removeChild*(node: PDomNode, oldChild: PDomNode, 226 | exc: PDomException): PDomNode{.cdecl, 227 | dynlib: htmllib, importc: "dom_Node_removeChild".} 228 | proc get_nodeValue*(node: PDomNode, exc: PDomException): PDomString{. 229 | cdecl, dynlib: htmllib, importc: "dom_Node__get_nodeValue".} 230 | proc get_firstChild*(node: PDomNode): PDomNode{.cdecl, 231 | dynlib: htmllib, importc: "dom_Node__get_firstChild".} 232 | proc get_nodeName*(node: PDomNode): PDomString{.cdecl, 233 | dynlib: htmllib, importc: "dom_Node__get_nodeName".} 234 | proc get_attributes*(node: PDomNode): PDomNamedNodeMap{.cdecl, 235 | dynlib: htmllib, importc: "dom_Node__get_attributes".} 236 | proc get_doctype*(doc: PDomDocument): PDomDocumentType{.cdecl, 237 | dynlib: htmllib, importc: "dom_Document__get_doctype".} 238 | proc hasChildNodes*(node: PDomNode): bool{.cdecl, 239 | dynlib: htmllib, importc: "dom_Node_hasChildNodes".} 240 | proc get_parentNode*(node: PDomNode): PDomNode{.cdecl, 241 | dynlib: htmllib, importc: "dom_Node__get_parentNode".} 242 | proc get_nextSibling*(node: PDomNode): PDomNode{.cdecl, 243 | dynlib: htmllib, importc: "dom_Node__get_nextSibling".} 244 | proc get_nodeType*(node: PDomNode): gushort{.cdecl, dynlib: htmllib, 245 | importc: "dom_Node__get_nodeType".} 246 | 247 | proc cloneNode*(node: PDomNode, deep: bool): PDomNode{.cdecl, 248 | dynlib: htmllib, importc: "dom_Node_cloneNode".} 249 | proc appendChild*(node: PDomNode, newChild: PDomNode, 250 | exc: PDomException): PDomNode{.cdecl, 251 | dynlib: htmllib, importc: "dom_Node_appendChild".} 252 | proc get_localName*(node: PDomNode): PDomString{.cdecl, 253 | dynlib: htmllib, importc: "dom_Node__get_localName".} 254 | proc get_namespaceURI*(node: PDomNode): PDomString{.cdecl, 255 | dynlib: htmllib, importc: "dom_Node__get_namespaceURI".} 256 | proc get_previousSibling*(node: PDomNode): PDomNode{.cdecl, 257 | dynlib: htmllib, importc: "dom_Node__get_previousSibling".} 258 | proc get_lastChild*(node: PDomNode): PDomNode{.cdecl, dynlib: htmllib, 259 | importc: "dom_Node__get_lastChild".} 260 | proc set_nodeValue*(node: PDomNode, value: PDomString, 261 | exc: PDomException){.cdecl, dynlib: htmllib, 262 | importc: "dom_Node__set_nodeValue".} 263 | proc get_ownerDocument*(node: PDomNode): PDomDocument{.cdecl, 264 | dynlib: htmllib, importc: "dom_Node__get_ownerDocument".} 265 | proc hasAttributes*(node: PDomNode): gboolean{.cdecl, dynlib: htmllib, 266 | importc: "dom_Node_hasAttributes".} 267 | proc DOM_TYPE_DOCUMENT*(): GType 268 | proc DOM_DOCUMENT*(theobject: pointer): PDomDocument 269 | proc DOM_DOCUMENT_CLASS*(klass: pointer): PDomDocumentClass 270 | proc DOM_IS_DOCUMENT*(theobject: pointer): bool 271 | proc DOM_IS_DOCUMENT_CLASS*(klass: pointer): bool 272 | proc DOM_DOCUMENT_GET_CLASS*(obj: pointer): PDomDocumentClass 273 | proc dom_document_get_type*(): GType 274 | proc get_documentElement*(doc: PDomDocument): PDomElement 275 | proc createElement*(doc: PDomDocument, tagName: PDomString): PDomElement 276 | proc createTextNode*(doc: PDomDocument, data: PDomString): PDomText 277 | proc createComment*(doc: PDomDocument, data: PDomString): PDomComment 278 | proc importNode*(doc: PDomDocument, importedNode: PDomNode, 279 | deep: bool, exc: PDomException): PDomNode 280 | proc HTML_TYPE_FOCUS_ITERATOR*(): GType 281 | proc HTML_FOCUS_ITERATOR*(theobject: pointer): PHtmlFocusIterator 282 | proc HTML_FOCUS_ITERATOR_CLASS*(klass: pointer): PHtmlFocusIteratorClass 283 | proc HTML_IS_FOCUS_ITERATOR*(theobject: pointer): bool 284 | proc HTML_IS_FOCUS_ITERATOR_CLASS*(klass: pointer): bool 285 | proc HTML_FOCUS_ITERATOR_GET_CLASS*(obj: pointer): PHtmlFocusIteratorClass 286 | proc html_focus_iterator_next_element*(document: PDomDocument, 287 | element: PDomElement): PDomElement{. 288 | cdecl, dynlib: htmllib, importc: "html_focus_iterator_next_element".} 289 | proc html_focus_iterator_prev_element*(document: PDomDocument, 290 | element: PDomElement): PDomElement{. 291 | cdecl, dynlib: htmllib, importc: "html_focus_iterator_prev_element".} 292 | proc HTML_PARSER_TYPE*(): GType 293 | proc HTML_PARSER*(obj: pointer): PHtmlParser 294 | proc HTML_PARSER_CLASS*(klass: pointer): PHtmlParserClass 295 | proc HTML_IS_PARSER*(obj: pointer): bool 296 | proc html_parser_get_type*(): GType 297 | proc parser_new*(document: PHtmlDocument, parser_type: THtmlParserType): PHtmlParser 298 | proc HTML_TYPE_STREAM*(): GType 299 | proc HTML_STREAM*(obj: pointer): PHtmlStream 300 | proc HTML_STREAM_CLASS*(klass: pointer): PHtmlStreamClass 301 | proc HTML_IS_STREAM*(obj: pointer): bool 302 | proc HTML_IS_STREAM_CLASS*(klass: pointer): bool 303 | proc HTML_STREAM_GET_CLASS*(obj: pointer): PHtmlStreamClass 304 | proc html_stream_get_type*(): GType{.cdecl, dynlib: htmllib, 305 | importc: "html_stream_get_type".} 306 | proc html_stream_new*(write_func: THtmlStreamWriteFunc, 307 | close_func: THtmlStreamCloseFunc, user_data: gpointer): PHtmlStream{. 308 | cdecl, dynlib: htmllib, importc: "html_stream_new".} 309 | proc write*(stream: PHtmlStream, buffer: cstring, size: guint){. 310 | cdecl, dynlib: htmllib, importc: "html_stream_write".} 311 | proc close*(stream: PHtmlStream){.cdecl, dynlib: htmllib, 312 | importc: "html_stream_close".} 313 | proc destroy*(stream: PHtmlStream){.cdecl, dynlib: htmllib, 314 | importc: "html_stream_destroy".} 315 | proc get_written*(stream: PHtmlStream): gint{.cdecl, 316 | dynlib: htmllib, importc: "html_stream_get_written".} 317 | proc cancel*(stream: PHtmlStream){.cdecl, dynlib: htmllib, 318 | importc: "html_stream_cancel".} 319 | proc set_cancel_func*(stream: PHtmlStream, 320 | abort_func: THtmlStreamCancelFunc, 321 | cancel_data: gpointer){.cdecl, 322 | dynlib: htmllib, importc: "html_stream_set_cancel_func".} 323 | proc get_mime_type*(stream: PHtmlStream): cstring{.cdecl, 324 | dynlib: htmllib, importc: "html_stream_get_mime_type".} 325 | proc set_mime_type*(stream: PHtmlStream, mime_type: cstring){.cdecl, 326 | dynlib: htmllib, importc: "html_stream_set_mime_type".} 327 | proc html_stream_buffer_new*(close_func: THtmlStreamBufferCloseFunc, 328 | user_data: gpointer): PHtmlStream{.cdecl, 329 | dynlib: htmllib, importc: "html_stream_buffer_new".} 330 | proc event_mouse_move*(view: PHtmlView, event: gdk2.PEventMotion){.cdecl, 331 | dynlib: htmllib, importc: "html_event_mouse_move".} 332 | proc event_button_press*(view: PHtmlView, button: gdk2.PEventButton){.cdecl, 333 | dynlib: htmllib, importc: "html_event_button_press".} 334 | proc event_button_release*(view: PHtmlView, event: gdk2.PEventButton){.cdecl, 335 | dynlib: htmllib, importc: "html_event_button_release".} 336 | proc event_activate*(view: PHtmlView){.cdecl, dynlib: htmllib, 337 | importc: "html_event_activate".} 338 | proc event_key_press*(view: PHtmlView, event: gdk2.PEventKey): gboolean{. 339 | cdecl, dynlib: htmllib, importc: "html_event_key_press".} 340 | proc event_find_root_box*(self: PHtmlBox, x: gint, y: gint): PHtmlBox{. 341 | cdecl, dynlib: htmllib, importc: "html_event_find_root_box".} 342 | proc selection_start*(view: PHtmlView, event: gdk2.PEventButton){.cdecl, 343 | dynlib: htmllib, importc: "html_selection_start".} 344 | proc selection_end*(view: PHtmlView, event: gdk2.PEventButton){.cdecl, 345 | dynlib: htmllib, importc: "html_selection_end".} 346 | proc selection_update*(view: PHtmlView, event: gdk2.PEventMotion){.cdecl, 347 | dynlib: htmllib, importc: "html_selection_update".} 348 | proc selection_clear*(view: PHtmlView){.cdecl, dynlib: htmllib, 349 | importc: "html_selection_clear".} 350 | proc selection_set*(view: PHtmlView, start: PDomNode, offset: int32, 351 | len: int32){.cdecl, dynlib: htmllib, 352 | importc: "html_selection_set".} 353 | proc HTML_CONTEXT_TYPE*(): GType 354 | proc HTML_CONTEXT*(obj: pointer): PHtmlContext 355 | proc HTML_CONTEXT_CLASS*(klass: pointer): PHtmlContextClass 356 | proc HTML_IS_CONTEXT*(obj: pointer): bool 357 | proc HTML_IS_CONTEXT_CLASS*(klass: pointer): bool 358 | proc html_context_get_type*(): GType 359 | proc html_context_get*(): PHtmlContext 360 | proc HTML_TYPE_DOCUMENT*(): GType 361 | proc HTML_DOCUMENT*(obj: pointer): PHtmlDocument 362 | proc HTML_DOCUMENT_CLASS*(klass: pointer): PHtmlDocumentClass 363 | proc HTML_IS_DOCUMENT*(obj: pointer): bool 364 | proc html_document_get_type*(): GType{.cdecl, dynlib: htmllib, 365 | importc: "html_document_get_type".} 366 | proc html_document_new*(): PHtmlDocument{.cdecl, dynlib: htmllib, 367 | importc: "html_document_new".} 368 | proc open_stream*(document: PHtmlDocument, mime_type: cstring): gboolean{. 369 | cdecl, dynlib: htmllib, importc: "html_document_open_stream".} 370 | proc write_stream*(document: PHtmlDocument, buffer: cstring, 371 | len: gint){.cdecl, dynlib: htmllib, 372 | importc: "html_document_write_stream".} 373 | proc close_stream*(document: PHtmlDocument){.cdecl, 374 | dynlib: htmllib, importc: "html_document_close_stream".} 375 | proc clear*(document: PHtmlDocument){.cdecl, dynlib: htmllib, 376 | importc: "html_document_clear".} 377 | proc HTML_TYPE_VIEW*(): GType 378 | proc HTML_VIEW*(obj: pointer): PHtmlView 379 | proc HTML_VIEW_CLASS*(klass: pointer): PHtmlViewClass 380 | proc HTML_IS_VIEW*(obj: pointer): bool 381 | proc html_view_get_type*(): GType{.cdecl, dynlib: htmllib, 382 | importc: "html_view_get_type".} 383 | proc html_view_new*(): PWidget{.cdecl, dynlib: htmllib, importc: "html_view_new".} 384 | proc set_document*(view: PHtmlView, document: PHtmlDocument){.cdecl, 385 | dynlib: htmllib, importc: "html_view_set_document".} 386 | proc jump_to_anchor*(view: PHtmlView, anchor: cstring){.cdecl, 387 | dynlib: htmllib, importc: "html_view_jump_to_anchor".} 388 | proc get_magnification*(view: PHtmlView): gdouble{.cdecl, 389 | dynlib: htmllib, importc: "html_view_get_magnification".} 390 | proc set_magnification*(view: PHtmlView, magnification: gdouble){. 391 | cdecl, dynlib: htmllib, importc: "html_view_set_magnification".} 392 | proc zoom_in*(view: PHtmlView){.cdecl, dynlib: htmllib, 393 | importc: "html_view_zoom_in".} 394 | proc zoom_out*(view: PHtmlView){.cdecl, dynlib: htmllib, 395 | importc: "html_view_zoom_out".} 396 | proc zoom_reset*(view: PHtmlView){.cdecl, dynlib: htmllib, 397 | importc: "html_view_zoom_reset".} 398 | 399 | proc DOM_TYPE_NODE*(): GType = 400 | result = dom_node_get_type() 401 | 402 | proc DOM_NODE*(theobject: pointer): PDomNode = 403 | result = G_TYPE_CHECK_INSTANCE_CAST(theobject, DOM_TYPE_NODE()) 404 | 405 | proc DOM_NODE_CLASS*(klass: pointer): PDomNodeClass = 406 | result = G_TYPE_CHECK_CLASS_CAST(klass, DOM_TYPE_NODE(), TDomNodeClass) 407 | 408 | proc DOM_IS_NODE*(theobject: pointer): bool = 409 | result = G_TYPE_CHECK_INSTANCE_TYPE(theobject, DOM_TYPE_NODE()) 410 | 411 | proc DOM_IS_NODE_CLASS*(klass: pointer): bool = 412 | result = G_TYPE_CHECK_CLASS_TYPE(klass, DOM_TYPE_NODE()) 413 | 414 | proc DOM_NODE_GET_CLASS*(obj: pointer): PDomNodeClass = 415 | result = G_TYPE_INSTANCE_GET_CLASS(obj, DOM_TYPE_NODE(), TDomNodeClass) 416 | 417 | proc DOM_TYPE_DOCUMENT*(): GType = 418 | result = dom_document_get_type() 419 | 420 | proc DOM_DOCUMENT*(theobject: pointer): PDomDocument = 421 | result = G_TYPE_CHECK_INSTANCE_CAST(theobject, DOM_TYPE_DOCUMENT(), 422 | TDomDocument) 423 | 424 | proc DOM_DOCUMENT_CLASS*(klass: pointer): PDomDocumentClass = 425 | result = G_TYPE_CHECK_CLASS_CAST(klass, DOM_TYPE_DOCUMENT(), TDomDocumentClass) 426 | 427 | proc DOM_IS_DOCUMENT*(theobject: pointer): bool = 428 | result = G_TYPE_CHECK_INSTANCE_TYPE(theobject, DOM_TYPE_DOCUMENT()) 429 | 430 | proc DOM_IS_DOCUMENT_CLASS*(klass: pointer): bool = 431 | result = G_TYPE_CHECK_CLASS_TYPE(klass, DOM_TYPE_DOCUMENT()) 432 | 433 | proc DOM_DOCUMENT_GET_CLASS*(obj: pointer): PDomDocumentClass = 434 | result = G_TYPE_INSTANCE_GET_CLASS(obj, DOM_TYPE_DOCUMENT(), TDomDocumentClass) 435 | 436 | proc HTML_TYPE_FOCUS_ITERATOR*(): GType = 437 | result = html_focus_iterator_get_type() 438 | 439 | proc HTML_FOCUS_ITERATOR*(theobject: pointer): PHtmlFocusIterator = 440 | result = G_TYPE_CHECK_INSTANCE_CAST(theobject, HTML_TYPE_FOCUS_ITERATOR(), 441 | HtmlFocusIterator) 442 | 443 | proc HTML_FOCUS_ITERATOR_CLASS*(klass: pointer): PHtmlFocusIteratorClass = 444 | result = G_TYPE_CHECK_CLASS_CAST(klass, HTML_TYPE_FOCUS_ITERATOR(), 445 | HtmlFocusIteratorClass) 446 | 447 | proc HTML_IS_FOCUS_ITERATOR*(theobject: pointer): bool = 448 | result = G_TYPE_CHECK_INSTANCE_TYPE(theobject, HTML_TYPE_FOCUS_ITERATOR()) 449 | 450 | proc HTML_IS_FOCUS_ITERATOR_CLASS*(klass: pointer): bool = 451 | result = G_TYPE_CHECK_CLASS_TYPE(klass, HTML_TYPE_FOCUS_ITERATOR()) 452 | 453 | proc HTML_FOCUS_ITERATOR_GET_CLASS*(obj: pointer): PHtmlFocusIteratorClass = 454 | result = G_TYPE_INSTANCE_GET_CLASS(obj, HTML_TYPE_FOCUS_ITERATOR(), 455 | HtmlFocusIteratorClass) 456 | 457 | proc HTML_PARSER_TYPE*(): GType = 458 | result = html_parser_get_type() 459 | 460 | proc HTML_PARSER*(obj: pointer): PHtmlParser = 461 | result = CHECK_CAST(obj, HTML_PARSER_TYPE(), THtmlParser) 462 | 463 | proc HTML_PARSER_CLASS*(klass: pointer): PHtmlParserClass = 464 | result = CHECK_CLASS_CAST(klass, HTML_PARSER_TYPE(), THtmlParserClass) 465 | 466 | proc HTML_IS_PARSER*(obj: pointer): bool = 467 | result = CHECK_TYPE(obj, HTML_PARSER_TYPE()) 468 | 469 | proc HTML_TYPE_STREAM*(): GType = 470 | result = html_stream_get_type() 471 | 472 | proc HTML_STREAM*(obj: pointer): PHtmlStream = 473 | result = PHtmlStream(G_TYPE_CHECK_INSTANCE_CAST(obj, HTML_TYPE_STREAM())) 474 | 475 | proc HTML_STREAM_CLASS*(klass: pointer): PHtmlStreamClass = 476 | result = G_TYPE_CHECK_CLASS_CAST(klass, HTML_TYPE_STREAM()) 477 | 478 | proc HTML_IS_STREAM*(obj: pointer): bool = 479 | result = G_TYPE_CHECK_INSTANCE_TYPE(obj, HTML_TYPE_STREAM()) 480 | 481 | proc HTML_IS_STREAM_CLASS*(klass: pointer): bool = 482 | result = G_TYPE_CHECK_CLASS_TYPE(klass, HTML_TYPE_STREAM()) 483 | 484 | proc HTML_STREAM_GET_CLASS*(obj: pointer): PHtmlStreamClass = 485 | result = PHtmlStreamClass(G_TYPE_INSTANCE_GET_CLASS(obj, HTML_TYPE_STREAM())) 486 | 487 | proc HTML_CONTEXT_TYPE*(): GType = 488 | result = html_context_get_type() 489 | 490 | proc HTML_CONTEXT*(obj: pointer): PHtmlContext = 491 | result = CHECK_CAST(obj, HTML_CONTEXT_TYPE(), THtmlContext) 492 | 493 | proc HTML_CONTEXT_CLASS*(klass: pointer): PHtmlContextClass = 494 | result = CHECK_CLASS_CAST(klass, HTML_CONTEXT_TYPE(), THtmlContextClass) 495 | 496 | proc HTML_IS_CONTEXT*(obj: pointer): bool = 497 | result = CHECK_TYPE(obj, HTML_CONTEXT_TYPE()) 498 | 499 | proc HTML_IS_CONTEXT_CLASS*(klass: pointer): bool = 500 | result = CHECK_CLASS_TYPE(klass, HTML_CONTEXT_TYPE()) 501 | 502 | proc HTML_TYPE_DOCUMENT*(): GType = 503 | result = html_document_get_type() 504 | 505 | proc HTML_DOCUMENT*(obj: pointer): PHtmlDocument = 506 | result = PHtmlDocument(CHECK_CAST(obj, HTML_TYPE_DOCUMENT())) 507 | 508 | proc HTML_DOCUMENT_CLASS*(klass: pointer): PHtmlDocumentClass = 509 | result = CHECK_CLASS_CAST(klass, HTML_TYPE_DOCUMENT()) 510 | 511 | proc HTML_IS_DOCUMENT*(obj: pointer): bool = 512 | result = CHECK_TYPE(obj, HTML_TYPE_DOCUMENT()) 513 | 514 | proc HTML_TYPE_VIEW*(): GType = 515 | result = html_view_get_type() 516 | 517 | proc HTML_VIEW*(obj: pointer): PHtmlView = 518 | result = PHtmlView(CHECK_CAST(obj, HTML_TYPE_VIEW())) 519 | 520 | proc HTML_VIEW_CLASS*(klass: pointer): PHtmlViewClass = 521 | result = PHtmlViewClass(CHECK_CLASS_CAST(klass, HTML_TYPE_VIEW())) 522 | 523 | proc HTML_IS_VIEW*(obj: pointer): bool = 524 | result = CHECK_TYPE(obj, HTML_TYPE_VIEW()) 525 | {.pop.} 526 | -------------------------------------------------------------------------------- /src/gtkmacintegration.nim: -------------------------------------------------------------------------------- 1 | {.deadCodeElim: on.} 2 | {.push gcsafe.} 3 | import 4 | glib2, gdk2, gdk2pixbuf, gtk2 5 | 6 | const 7 | lib = "(libgtkmacintegration.2.dylib|libgtkmacintegration-gtk2.2.dylib)" 8 | 9 | type 10 | POSXApplication* = ptr TOSXApplication 11 | TOSXApplication* = object of TGObject 12 | private_data*: gpointer 13 | 14 | POSXApplicationClass* = ptr TOSXApplicationClass 15 | TOSXApplicationClass* = object of TGObjectClass 16 | 17 | TOSXApplicationAttentionType* = enum 18 | CRITICAL_REQUEST = 0, INFO_REQUEST = 10 19 | 20 | proc get_type*(): GType{.cdecl, dynlib: lib, 21 | importc: "gtkosx_application_get_type".} 22 | 23 | proc get*(): POSXApplication{.cdecl, dynlib: lib, 24 | importc: "gtkosx_application_get".} 25 | 26 | proc ready*(application: POSXApplication){.cdecl, dynlib: lib, 27 | importc: "gtkosx_application_ready".} 28 | 29 | proc set_use_quartz_accelerators*(application: POSXApplication, 30 | value: gboolean){.cdecl, dynlib: lib, 31 | importc: "gtkosx_set_use_quartz_accelerators".} 32 | 33 | proc use_quartz_accelerators*(application: POSXApplication): gboolean {.cdecl, 34 | dynlib: lib, importc: "gtkosx_application_use_quartz_accelerators".} 35 | 36 | proc set_menu_bar*(application: POSXApplication, menu_shell: PMenuShell){.cdecl, 37 | dynlib: lib, importc: "gtkosx_application_set_menu_bar".} 38 | 39 | proc sync_menubar*(application: POSXApplication){.cdecl, dynlib: lib, 40 | importc: "gtkosx_application_sync_menubar".} 41 | 42 | proc insert_app_menu_item*(application: POSXApplication, menu_item: PWidget, 43 | index: gint){.cdecl, dynlib: lib, 44 | importc: "gtkosx_application_insert_app_menu_item".} 45 | 46 | proc set_window_menu*(application: POSXApplication, menu_item: PMenuItem){.cdecl, 47 | dynlib: lib, importc: "gtkosx_application_set_window_menu".} 48 | 49 | proc set_help_menu*(application: POSXApplication, menu_item: PMenuItem){.cdecl, 50 | dynlib: lib, importc: "gtkosx_application_set_help_menu".} 51 | 52 | proc set_dock_menu*(application: POSXApplication, menu_shell: PMenuShell){.cdecl, 53 | dynlib: lib, importc: "gtkosx_application_set_dock_menu".} 54 | 55 | proc set_dock_icon_pixbuf*(application: POSXApplication, pixbuf: PPixbuf){.cdecl, 56 | dynlib: lib, importc: "gtkosx_application_set_dock_icon_pixbuf".} 57 | 58 | proc set_dock_icon_resource*(application: POSXApplication, 59 | name, resoucer_type, subdir : cstring){.cdecl, dynlib: lib, 60 | importc: "gtkosx_application_set_dock_item_resource".} 61 | 62 | proc attention_request*(application: POSXApplication, 63 | kind: TOSXApplicationAttentionType): gint {.cdecl, 64 | dynlib: lib, importc: "gtkosx_application_attention_request".} 65 | 66 | proc cancel_attention_request*(application: POSXApplication, id: gint){.cdecl, 67 | dynlib: lib, importc: "gtkosx_application_cancel_attention_request".} 68 | 69 | proc get_bundle_path*(): cstring{.cdecl, dynlib: lib, 70 | importc: "gtkosx_application_get_bundle_path".} 71 | 72 | proc get_resource_path*(): cstring{.cdecl, dynlib: lib, 73 | importc: "gtkosx_application_get_resource_path(".} 74 | 75 | proc get_executable_path*(): cstring{.cdecl, dynlib: lib, 76 | importc: "gtkosx_application_get_executable_path".} 77 | 78 | proc get_bundle_id*(): cstring{.cdecl, dynlib: lib, 79 | importc: "gtkosx_application_get_bundle_id".} 80 | 81 | proc get_bundle_info*(key : cstring): cstring{.cdecl, dynlib: lib, 82 | importc: "gtkosx_application_get_bundle_info".} 83 | {.pop.} 84 | -------------------------------------------------------------------------------- /src/libglade2.nim: -------------------------------------------------------------------------------- 1 | {.deadCodeElim: on.} 2 | {.push gcsafe.} 3 | import 4 | glib2, gtk2 5 | 6 | when defined(win32): 7 | const 8 | LibGladeLib = "libglade-2.0-0.dll" 9 | elif defined(macosx): 10 | const 11 | LibGladeLib = "libglade-2.0.dylib" 12 | else: 13 | const 14 | LibGladeLib = "libglade-2.0.so" 15 | type 16 | PLongint* = ptr int32 17 | PSmallInt* = ptr int16 18 | PByte* = ptr int8 19 | PWord* = ptr int16 20 | PDWord* = ptr int32 21 | PDouble* = ptr float64 22 | 23 | proc init*(){.cdecl, dynlib: LibGladeLib, importc: "glade_init".} 24 | proc require*(TheLibrary: cstring){.cdecl, dynlib: LibGladeLib, 25 | importc: "glade_require".} 26 | proc provide*(TheLibrary: cstring){.cdecl, dynlib: LibGladeLib, 27 | importc: "glade_provide".} 28 | type 29 | PXMLPrivate* = pointer 30 | PXML* = ptr TXML 31 | TXML* = object of TGObject 32 | filename*: cstring 33 | priv*: PXMLPrivate 34 | 35 | PXMLClass* = ptr TXMLClass 36 | TXMLClass* = object of TGObjectClass 37 | TXMLConnectFunc* = proc (handler_name: cstring, anObject: PGObject, 38 | signal_name: cstring, signal_data: cstring, 39 | connect_object: PGObject, after: gboolean, 40 | user_data: gpointer){.cdecl.} 41 | 42 | proc TYPE_XML*(): GType 43 | proc XML*(obj: pointer): PXML 44 | proc XML_CLASS*(klass: pointer): PXMLClass 45 | proc IS_XML*(obj: pointer): gboolean 46 | proc IS_XML_CLASS*(klass: pointer): gboolean 47 | proc XML_GET_CLASS*(obj: pointer): PXMLClass 48 | proc xml_get_type*(): GType{.cdecl, dynlib: LibGladeLib, 49 | importc: "glade_xml_get_type".} 50 | proc xml_new*(fname: cstring, root: cstring, domain: cstring): PXML{.cdecl, 51 | dynlib: LibGladeLib, importc: "glade_xml_new".} 52 | proc xml_new_from_buffer*(buffer: cstring, size: int32, root: cstring, 53 | domain: cstring): PXML{.cdecl, dynlib: LibGladeLib, 54 | importc: "glade_xml_new_from_buffer".} 55 | proc construct*(self: PXML, fname: cstring, root: cstring, domain: cstring): gboolean{. 56 | cdecl, dynlib: LibGladeLib, importc: "glade_xml_construct".} 57 | proc signal_connect*(self: PXML, handlername: cstring, fn: TGCallback){. 58 | cdecl, dynlib: LibGladeLib, importc: "glade_xml_signal_connect".} 59 | proc signal_connect_data*(self: PXML, handlername: cstring, 60 | fn: TGCallback, user_data: gpointer){.cdecl, 61 | dynlib: LibGladeLib, importc: "glade_xml_signal_connect_data".} 62 | proc signal_autoconnect*(self: PXML){.cdecl, dynlib: LibGladeLib, 63 | importc: "glade_xml_signal_autoconnect".} 64 | proc signal_connect_full*(self: PXML, handler_name: cstring, 65 | fn: TXMLConnectFunc, user_data: gpointer){. 66 | cdecl, dynlib: LibGladeLib, importc: "glade_xml_signal_connect_full".} 67 | proc signal_autoconnect_full*(self: PXML, fn: TXMLConnectFunc, 68 | user_data: gpointer){.cdecl, 69 | dynlib: LibGladeLib, importc: "glade_xml_signal_autoconnect_full".} 70 | proc get_widget*(self: PXML, name: cstring): gtk2.PWidget{.cdecl, 71 | dynlib: LibGladeLib, importc: "glade_xml_get_widget".} 72 | proc get_widget_prefix*(self: PXML, name: cstring): PGList{.cdecl, 73 | dynlib: LibGladeLib, importc: "glade_xml_get_widget_prefix".} 74 | proc relative_file*(self: PXML, filename: cstring): cstring{.cdecl, 75 | dynlib: LibGladeLib, importc: "glade_xml_relative_file".} 76 | proc get_widget_name*(widget: gtk2.PWidget): cstring{.cdecl, dynlib: LibGladeLib, 77 | importc: "glade_get_widget_name".} 78 | proc get_widget_tree*(widget: gtk2.PWidget): PXML{.cdecl, dynlib: LibGladeLib, 79 | importc: "glade_get_widget_tree".} 80 | type 81 | PXMLCustomWidgetHandler* = ptr TXMLCustomWidgetHandler 82 | TXMLCustomWidgetHandler* = gtk2.TWidget 83 | 84 | proc set_custom_handler*(handler: TXMLCustomWidgetHandler, user_data: gpointer){. 85 | cdecl, dynlib: LibGladeLib, importc: "glade_set_custom_handler".} 86 | proc gnome_init*() = 87 | init() 88 | 89 | proc bonobo_init*() = 90 | init() 91 | 92 | proc xml_new_from_memory*(buffer: cstring, size: int32, root: cstring, 93 | domain: cstring): PXML = 94 | result = xml_new_from_buffer(buffer, size, root, domain) 95 | 96 | proc TYPE_XML*(): GType = 97 | result = xml_get_type() 98 | 99 | proc XML*(obj: pointer): PXML = 100 | result = cast[PXML](G_TYPE_CHECK_INSTANCE_CAST(obj, TYPE_XML())) 101 | 102 | proc XML_CLASS*(klass: pointer): PXMLClass = 103 | result = cast[PXMLClass](G_TYPE_CHECK_CLASS_CAST(klass, TYPE_XML())) 104 | 105 | proc IS_XML*(obj: pointer): gboolean = 106 | result = G_TYPE_CHECK_INSTANCE_TYPE(obj, TYPE_XML()) 107 | 108 | proc IS_XML_CLASS*(klass: pointer): gboolean = 109 | result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_XML()) 110 | 111 | proc XML_GET_CLASS*(obj: pointer): PXMLClass = 112 | result = cast[PXMLClass](G_TYPE_INSTANCE_GET_CLASS(obj, TYPE_XML())) 113 | {.pop.} 114 | -------------------------------------------------------------------------------- /src/pango.nim: -------------------------------------------------------------------------------- 1 | {.deadCodeElim: on.} 2 | {.push gcsafe.} 3 | import 4 | glib2 5 | 6 | when defined(win32): 7 | const 8 | lib* = "libpango-1.0-0.dll" 9 | elif defined(macosx): 10 | const 11 | lib* = "libpango-1.0(|.0).dylib" 12 | else: 13 | const 14 | lib* = "libpango-1.0.so.0" 15 | type 16 | TFont* {.pure, final.} = object 17 | PFont* = ptr TFont 18 | TFontFamily* {.pure, final.} = object 19 | PFontFamily* = ptr TFontFamily 20 | TFontSet* {.pure, final.} = object 21 | PFontset* = ptr TFontset 22 | TFontMetrics* {.pure, final.} = object 23 | PFontMetrics* = ptr TFontMetrics 24 | TFontFace* {.pure, final.} = object 25 | PFontFace* = ptr TFontFace 26 | TFontMap* {.pure, final.} = object 27 | PFontMap* = ptr TFontMap 28 | TFontsetClass {.pure, final.} = object 29 | PFontsetClass* = ptr TFontSetClass 30 | TFontFamilyClass* {.pure, final.} = object 31 | PFontFamilyClass* = ptr TFontFamilyClass 32 | TFontFaceClass* {.pure, final.} = object 33 | PFontFaceClass* = ptr TFontFaceClass 34 | TFontClass* {.pure, final.} = object 35 | PFontClass* = ptr TFontClass 36 | TFontMapClass* {.pure, final.} = object 37 | PFontMapClass* = ptr TFontMapClass 38 | PFontDescription* = ptr TFontDescription 39 | TFontDescription* {.pure, final.} = object 40 | PAttrList* = ptr TAttrList 41 | TAttrList* {.pure, final.} = object 42 | PAttrIterator* = ptr TAttrIterator 43 | TAttrIterator* {.pure, final.} = object 44 | PLayout* = ptr TLayout 45 | TLayout* {.pure, final.} = object 46 | PLayoutClass* = ptr TLayoutClass 47 | TLayoutClass* {.pure, final.} = object 48 | PLayoutIter* = ptr TLayoutIter 49 | TLayoutIter* {.pure, final.} = object 50 | PContext* = ptr TContext 51 | TContext* {.pure, final.} = object 52 | PContextClass* = ptr TContextClass 53 | TContextClass* {.pure, final.} = object 54 | PFontsetSimple* = ptr TFontsetSimple 55 | TFontsetSimple* {.pure, final.} = object 56 | PTabArray* = ptr TTabArray 57 | TTabArray* {.pure, final.} = object 58 | PGlyphString* = ptr TGlyphString 59 | PAnalysis* = ptr TAnalysis 60 | PItem* = ptr TItem 61 | PLanguage* = ptr TLanguage 62 | TLanguage* {.pure, final.} = object 63 | PGlyph* = ptr TGlyph 64 | TGlyph* = guint32 65 | PRectangle* = ptr TRectangle 66 | TRectangle*{.final, pure.} = object 67 | x*: int32 68 | y*: int32 69 | width*: int32 70 | height*: int32 71 | 72 | PDirection* = ptr TDirection 73 | TDirection* = enum 74 | DIRECTION_LTR, DIRECTION_RTL, DIRECTION_TTB_LTR, DIRECTION_TTB_RTL 75 | PColor* = ptr TColor 76 | TColor*{.final, pure.} = object 77 | red*: guint16 78 | green*: guint16 79 | blue*: guint16 80 | 81 | PAttrType* = ptr TAttrType 82 | TAttrType* = int32 83 | PUnderline* = ptr TUnderline 84 | TUnderline* = int32 85 | PAttribute* = ptr TAttribute 86 | PAttrClass* = ptr TAttrClass 87 | TAttribute*{.final, pure.} = object 88 | klass*: PAttrClass 89 | start_index*: int 90 | end_index*: int 91 | 92 | TAttrClass*{.final, pure.} = object 93 | `type`*: TAttrType 94 | copy*: proc (attr: PAttribute): PAttribute{.cdecl.} 95 | destroy*: proc (attr: PAttribute){.cdecl.} 96 | equal*: proc (attr1: PAttribute, attr2: PAttribute): gboolean{.cdecl.} 97 | 98 | PAttrString* = ptr TAttrString 99 | TAttrString*{.final, pure.} = object 100 | attr*: TAttribute 101 | value*: cstring 102 | 103 | PAttrLanguage* = ptr TAttrLanguage 104 | TAttrLanguage*{.final, pure.} = object 105 | attr*: TAttribute 106 | value*: PLanguage 107 | 108 | PAttrInt* = ptr TAttrInt 109 | TAttrInt*{.final, pure.} = object 110 | attr*: TAttribute 111 | value*: int32 112 | 113 | PAttrFloat* = ptr TAttrFloat 114 | TAttrFloat*{.final, pure.} = object 115 | attr*: TAttribute 116 | value*: gdouble 117 | 118 | PAttrColor* = ptr TAttrColor 119 | TAttrColor*{.final, pure.} = object 120 | attr*: TAttribute 121 | color*: TColor 122 | 123 | PAttrShape* = ptr TAttrShape 124 | TAttrShape*{.final, pure.} = object 125 | attr*: TAttribute 126 | ink_rect*: TRectangle 127 | logical_rect*: TRectangle 128 | 129 | PAttrFontDesc* = ptr TAttrFontDesc 130 | TAttrFontDesc*{.final, pure.} = object 131 | attr*: TAttribute 132 | desc*: PFontDescription 133 | 134 | PLogAttr* = ptr TLogAttr 135 | TLogAttr*{.final, pure.} = object 136 | flag0*: guint16 137 | 138 | PCoverageLevel* = ptr TCoverageLevel 139 | TCoverageLevel* = enum 140 | COVERAGE_NONE, COVERAGE_FALLBACK, COVERAGE_APPROXIMATE, COVERAGE_EXACT 141 | PBlockInfo* = ptr TBlockInfo 142 | TBlockInfo*{.final, pure.} = object 143 | data*: Pguchar 144 | level*: TCoverageLevel 145 | 146 | PCoverage* = ptr TCoverage 147 | TCoverage*{.final, pure.} = object 148 | ref_count*: int 149 | n_blocks*: int32 150 | data_size*: int32 151 | blocks*: PBlockInfo 152 | 153 | PEngineRange* = ptr TEngineRange 154 | TEngineRange*{.final, pure.} = object 155 | start*: int32 156 | theEnd*: int32 157 | langs*: cstring 158 | 159 | PEngineInfo* = ptr TEngineInfo 160 | TEngineInfo*{.final, pure.} = object 161 | id*: cstring 162 | engine_type*: cstring 163 | render_type*: cstring 164 | ranges*: PEngineRange 165 | n_ranges*: gint 166 | 167 | PEngine* = ptr TEngine 168 | TEngine*{.final, pure.} = object 169 | id*: cstring 170 | `type`*: cstring 171 | length*: gint 172 | 173 | TEngineLangScriptBreak* = proc (text: cstring, len: int32, 174 | analysis: PAnalysis, attrs: PLogAttr, 175 | attrs_len: int32){.cdecl.} 176 | PEngineLang* = ptr TEngineLang 177 | TEngineLang*{.final, pure.} = object 178 | engine*: TEngine 179 | script_break*: TEngineLangScriptBreak 180 | 181 | TEngineShapeScript* = proc (font: PFont, text: cstring, length: int32, 182 | analysis: PAnalysis, glyphs: PGlyphString){.cdecl.} 183 | TEngineShapeGetCoverage* = proc (font: PFont, language: PLanguage): PCoverage{. 184 | cdecl.} 185 | PEngineShape* = ptr TEngineShape 186 | TEngineShape*{.final, pure.} = object 187 | engine*: TEngine 188 | script_shape*: TEngineShapeScript 189 | get_coverage*: TEngineShapeGetCoverage 190 | 191 | PStyle* = ptr TStyle 192 | TStyle* = gint 193 | PVariant* = ptr TVariant 194 | TVariant* = gint 195 | PWeight* = ptr TWeight 196 | TWeight* = gint 197 | PStretch* = ptr TStretch 198 | TStretch* = gint 199 | PFontMask* = ptr TFontMask 200 | TFontMask* = int32 201 | PGlyphUnit* = ptr TGlyphUnit 202 | TGlyphUnit* = gint32 203 | PGlyphGeometry* = ptr TGlyphGeometry 204 | TGlyphGeometry*{.final, pure.} = object 205 | width*: TGlyphUnit 206 | x_offset*: TGlyphUnit 207 | y_offset*: TGlyphUnit 208 | 209 | PGlyphVisAttr* = ptr TGlyphVisAttr 210 | TGlyphVisAttr*{.final, pure.} = object 211 | flag0*: uint16 212 | 213 | PGlyphInfo* = ptr TGlyphInfo 214 | TGlyphInfo*{.final, pure.} = object 215 | glyph*: TGlyph 216 | geometry*: TGlyphGeometry 217 | attr*: TGlyphVisAttr 218 | 219 | TGlyphString*{.final, pure.} = object 220 | num_glyphs*: gint 221 | glyphs*: PGlyphInfo 222 | log_clusters*: Pgint 223 | space*: gint 224 | 225 | TAnalysis*{.final, pure.} = object 226 | shape_engine*: PEngineShape 227 | lang_engine*: PEngineLang 228 | font*: PFont 229 | level*: guint8 230 | language*: PLanguage 231 | extra_attrs*: PGSList 232 | 233 | TItem*{.final, pure.} = object 234 | offset*: gint 235 | length*: gint 236 | num_chars*: gint 237 | analysis*: TAnalysis 238 | 239 | PAlignment* = ptr TAlignment 240 | TAlignment* = enum 241 | ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT 242 | PWrapMode* = ptr TWrapMode 243 | TWrapMode* = enum 244 | WRAP_WORD, WRAP_CHAR 245 | PLayoutLine* = ptr TLayoutLine 246 | TLayoutLine*{.final, pure.} = object 247 | layout*: PLayout 248 | start_index*: gint 249 | length*: gint 250 | runs*: PGSList 251 | 252 | PLayoutRun* = ptr TLayoutRun 253 | TLayoutRun*{.final, pure.} = object 254 | item*: PItem 255 | glyphs*: PGlyphString 256 | 257 | PTabAlign* = ptr TTabAlign 258 | TTabAlign* = enum 259 | TAB_LEFT 260 | 261 | const 262 | SCALE* = 1024 263 | 264 | proc PIXELS*(d: int): int 265 | proc ASCENT*(rect: TRectangle): int32 266 | proc DESCENT*(rect: TRectangle): int32 267 | proc LBEARING*(rect: TRectangle): int32 268 | proc RBEARING*(rect: TRectangle): int32 269 | proc TYPE_LANGUAGE*(): GType 270 | proc language_get_type*(): GType{.cdecl, dynlib: lib, 271 | importc: "pango_language_get_type".} 272 | proc language_from_string*(language: cstring): PLanguage{.cdecl, dynlib: lib, 273 | importc: "pango_language_from_string".} 274 | proc to_string*(language: PLanguage): cstring 275 | proc matches*(language: PLanguage, range_list: cstring): gboolean{. 276 | cdecl, dynlib: lib, importc: "pango_language_matches".} 277 | const 278 | ATTR_INVALID* = 0 279 | ATTR_LANGUAGE* = 1 280 | ATTR_FAMILY* = 2 281 | ATTR_STYLE* = 3 282 | ATTR_WEIGHT* = 4 283 | ATTR_VARIANT* = 5 284 | ATTR_STRETCH* = 6 285 | ATTR_SIZE* = 7 286 | ATTR_FONT_DESC* = 8 287 | ATTR_FOREGROUND* = 9 288 | ATTR_BACKGROUND* = 10 289 | ATTR_UNDERLINE* = 11 290 | ATTR_STRIKETHROUGH* = 12 291 | ATTR_RISE* = 13 292 | ATTR_SHAPE* = 14 293 | ATTR_SCALE* = 15 294 | UNDERLINE_NONE* = 0 295 | UNDERLINE_SINGLE* = 1 296 | UNDERLINE_DOUBLE* = 2 297 | UNDERLINE_LOW* = 3 298 | 299 | proc TYPE_COLOR*(): GType 300 | proc color_get_type*(): GType{.cdecl, dynlib: lib, 301 | importc: "pango_color_get_type".} 302 | proc copy*(src: PColor): PColor{.cdecl, dynlib: lib, 303 | importc: "pango_color_copy".} 304 | proc free*(color: PColor){.cdecl, dynlib: lib, importc: "pango_color_free".} 305 | proc parse*(color: PColor, spec: cstring): gboolean{.cdecl, dynlib: lib, 306 | importc: "pango_color_parse".} 307 | proc TYPE_ATTR_LIST*(): GType 308 | proc attr_type_register*(name: cstring): TAttrType{.cdecl, dynlib: lib, 309 | importc: "pango_attr_type_register".} 310 | proc copy*(attr: PAttribute): PAttribute{.cdecl, dynlib: lib, 311 | importc: "pango_attribute_copy".} 312 | proc destroy*(attr: PAttribute){.cdecl, dynlib: lib, 313 | importc: "pango_attribute_destroy".} 314 | proc equal*(attr1: PAttribute, attr2: PAttribute): gboolean{.cdecl, 315 | dynlib: lib, importc: "pango_attribute_equal".} 316 | proc attr_language_new*(language: PLanguage): PAttribute{.cdecl, dynlib: lib, 317 | importc: "pango_attr_language_new".} 318 | proc attr_family_new*(family: cstring): PAttribute{.cdecl, dynlib: lib, 319 | importc: "pango_attr_family_new".} 320 | proc attr_foreground_new*(red: guint16, green: guint16, blue: guint16): PAttribute{. 321 | cdecl, dynlib: lib, importc: "pango_attr_foreground_new".} 322 | proc attr_background_new*(red: guint16, green: guint16, blue: guint16): PAttribute{. 323 | cdecl, dynlib: lib, importc: "pango_attr_background_new".} 324 | proc attr_size_new*(size: int32): PAttribute{.cdecl, dynlib: lib, 325 | importc: "pango_attr_size_new".} 326 | proc attr_style_new*(style: TStyle): PAttribute{.cdecl, dynlib: lib, 327 | importc: "pango_attr_style_new".} 328 | proc attr_weight_new*(weight: TWeight): PAttribute{.cdecl, dynlib: lib, 329 | importc: "pango_attr_weight_new".} 330 | proc attr_variant_new*(variant: TVariant): PAttribute{.cdecl, dynlib: lib, 331 | importc: "pango_attr_variant_new".} 332 | proc attr_stretch_new*(stretch: TStretch): PAttribute{.cdecl, dynlib: lib, 333 | importc: "pango_attr_stretch_new".} 334 | proc attr_font_desc_new*(desc: PFontDescription): PAttribute{.cdecl, 335 | dynlib: lib, importc: "pango_attr_font_desc_new".} 336 | proc attr_underline_new*(underline: TUnderline): PAttribute{.cdecl, dynlib: lib, 337 | importc: "pango_attr_underline_new".} 338 | proc attr_strikethrough_new*(strikethrough: gboolean): PAttribute{.cdecl, 339 | dynlib: lib, importc: "pango_attr_strikethrough_new".} 340 | proc attr_rise_new*(rise: int32): PAttribute{.cdecl, dynlib: lib, 341 | importc: "pango_attr_rise_new".} 342 | proc attr_shape_new*(ink_rect: PRectangle, logical_rect: PRectangle): PAttribute{. 343 | cdecl, dynlib: lib, importc: "pango_attr_shape_new".} 344 | proc attr_scale_new*(scale_factor: gdouble): PAttribute{.cdecl, dynlib: lib, 345 | importc: "pango_attr_scale_new".} 346 | proc attr_list_get_type*(): GType{.cdecl, dynlib: lib, 347 | importc: "pango_attr_list_get_type".} 348 | proc attr_list_new*(): PAttrList{.cdecl, dynlib: lib, 349 | importc: "pango_attr_list_new".} 350 | proc reference*(list: PAttrList){.cdecl, dynlib: lib, 351 | importc: "pango_attr_list_ref".} 352 | proc unref*(list: PAttrList){.cdecl, dynlib: lib, 353 | importc: "pango_attr_list_unref".} 354 | proc copy*(list: PAttrList): PAttrList{.cdecl, dynlib: lib, 355 | importc: "pango_attr_list_copy".} 356 | proc insert*(list: PAttrList, attr: PAttribute){.cdecl, dynlib: lib, 357 | importc: "pango_attr_list_insert".} 358 | proc insert_before*(list: PAttrList, attr: PAttribute){.cdecl, 359 | dynlib: lib, importc: "pango_attr_list_insert_before".} 360 | proc change*(list: PAttrList, attr: PAttribute){.cdecl, dynlib: lib, 361 | importc: "pango_attr_list_change".} 362 | proc splice*(list: PAttrList, other: PAttrList, pos: gint, len: gint){. 363 | cdecl, dynlib: lib, importc: "pango_attr_list_splice".} 364 | proc get_iterator*(list: PAttrList): PAttrIterator{.cdecl, 365 | dynlib: lib, importc: "pango_attr_list_get_iterator".} 366 | proc attr_iterator_range*(`iterator`: PAttrIterator, start: Pgint, theEnd: Pgint){. 367 | cdecl, dynlib: lib, importc: "pango_attr_iterator_range".} 368 | proc attr_iterator_next*(`iterator`: PAttrIterator): gboolean{.cdecl, 369 | dynlib: lib, importc: "pango_attr_iterator_next".} 370 | proc attr_iterator_copy*(`iterator`: PAttrIterator): PAttrIterator{.cdecl, 371 | dynlib: lib, importc: "pango_attr_iterator_copy".} 372 | proc attr_iterator_destroy*(`iterator`: PAttrIterator){.cdecl, dynlib: lib, 373 | importc: "pango_attr_iterator_destroy".} 374 | proc attr_iterator_get*(`iterator`: PAttrIterator, `type`: TAttrType): PAttribute{. 375 | cdecl, dynlib: lib, importc: "pango_attr_iterator_get".} 376 | proc attr_iterator_get_font*(`iterator`: PAttrIterator, desc: PFontDescription, 377 | language: var PLanguage, extra_attrs: PPGSList){. 378 | cdecl, dynlib: lib, importc: "pango_attr_iterator_get_font".} 379 | proc parse_markup*(markup_text: cstring, length: int32, accel_marker: gunichar, 380 | attr_list: var PAttrList, text: PPchar, 381 | accel_char: Pgunichar, error: pointer): gboolean{.cdecl, 382 | dynlib: lib, importc: "pango_parse_markup".} 383 | const 384 | bm_TPangoLogAttr_is_line_break* = 0x0001'u16 385 | bp_TPangoLogAttr_is_line_break* = 0'u16 386 | bm_TPangoLogAttr_is_mandatory_break* = 0x0002'u16 387 | bp_TPangoLogAttr_is_mandatory_break* = 1'u16 388 | bm_TPangoLogAttr_is_char_break* = 0x0004'u16 389 | bp_TPangoLogAttr_is_char_break* = 2'u16 390 | bm_TPangoLogAttr_is_white* = 0x0008'u16 391 | bp_TPangoLogAttr_is_white* = 3'u16 392 | bm_TPangoLogAttr_is_cursor_position* = 0x0010'u16 393 | bp_TPangoLogAttr_is_cursor_position* = 4'u16 394 | bm_TPangoLogAttr_is_word_start* = 0x0020'u16 395 | bp_TPangoLogAttr_is_word_start* = 5'u16 396 | bm_TPangoLogAttr_is_word_end* = 0x0040'u16 397 | bp_TPangoLogAttr_is_word_end* = 6'u16 398 | bm_TPangoLogAttr_is_sentence_boundary* = 0x0080'u16 399 | bp_TPangoLogAttr_is_sentence_boundary* = 7'u16 400 | bm_TPangoLogAttr_is_sentence_start* = 0x0100'u16 401 | bp_TPangoLogAttr_is_sentence_start* = 8'u16 402 | bm_TPangoLogAttr_is_sentence_end* = 0x0200'u16 403 | bp_TPangoLogAttr_is_sentence_end* = 9'u16 404 | 405 | proc is_line_break*(a: PLogAttr): guint 406 | proc set_is_line_break*(a: PLogAttr, `is_line_break`: guint) 407 | proc is_mandatory_break*(a: PLogAttr): guint 408 | proc set_is_mandatory_break*(a: PLogAttr, `is_mandatory_break`: guint) 409 | proc is_char_break*(a: PLogAttr): guint 410 | proc set_is_char_break*(a: PLogAttr, `is_char_break`: guint) 411 | proc is_white*(a: PLogAttr): guint 412 | proc set_is_white*(a: PLogAttr, `is_white`: guint) 413 | proc is_cursor_position*(a: PLogAttr): guint 414 | proc set_is_cursor_position*(a: PLogAttr, `is_cursor_position`: guint) 415 | proc is_word_start*(a: PLogAttr): guint 416 | proc set_is_word_start*(a: PLogAttr, `is_word_start`: guint) 417 | proc is_word_end*(a: PLogAttr): guint 418 | proc set_is_word_end*(a: PLogAttr, `is_word_end`: guint) 419 | proc is_sentence_boundary*(a: PLogAttr): guint 420 | proc set_is_sentence_boundary*(a: PLogAttr, `is_sentence_boundary`: guint) 421 | proc is_sentence_start*(a: PLogAttr): guint 422 | proc set_is_sentence_start*(a: PLogAttr, `is_sentence_start`: guint) 423 | proc is_sentence_end*(a: PLogAttr): guint 424 | proc set_is_sentence_end*(a: PLogAttr, `is_sentence_end`: guint) 425 | proc `break`*(text: cstring, length: int32, analysis: PAnalysis, attrs: PLogAttr, 426 | attrs_len: int32){.cdecl, dynlib: lib, importc: "pango_break".} 427 | proc find_paragraph_boundary*(text: cstring, length: gint, 428 | paragraph_delimiter_index: Pgint, 429 | next_paragraph_start: Pgint){.cdecl, dynlib: lib, 430 | importc: "pango_find_paragraph_boundary".} 431 | proc get_log_attrs*(text: cstring, length: int32, level: int32, 432 | language: PLanguage, log_attrs: PLogAttr, attrs_len: int32){. 433 | cdecl, dynlib: lib, importc: "pango_get_log_attrs".} 434 | proc TYPE_CONTEXT*(): GType 435 | proc CONTEXT*(anObject: pointer): PContext 436 | proc CONTEXT_CLASS*(klass: pointer): PContextClass 437 | proc IS_CONTEXT*(anObject: pointer): bool 438 | proc IS_CONTEXT_CLASS*(klass: pointer): bool 439 | proc GET_CLASS*(obj: PContext): PContextClass 440 | proc context_get_type*(): GType{.cdecl, dynlib: lib, 441 | importc: "pango_context_get_type".} 442 | proc list_families*(context: PContext, 443 | families: openarray[ptr PFontFamily]){.cdecl, 444 | dynlib: lib, importc: "pango_context_list_families".} 445 | proc load_font*(context: PContext, desc: PFontDescription): PFont{. 446 | cdecl, dynlib: lib, importc: "pango_context_load_font".} 447 | proc load_fontset*(context: PContext, desc: PFontDescription, 448 | language: PLanguage): PFontset{.cdecl, dynlib: lib, 449 | importc: "pango_context_load_fontset".} 450 | proc get_metrics*(context: PContext, desc: PFontDescription, 451 | language: PLanguage): PFontMetrics{.cdecl, 452 | dynlib: lib, importc: "pango_context_get_metrics".} 453 | proc set_font_description*(context: PContext, desc: PFontDescription){. 454 | cdecl, dynlib: lib, importc: "pango_context_set_font_description".} 455 | proc get_font_description*(context: PContext): PFontDescription{.cdecl, 456 | dynlib: lib, importc: "pango_context_get_font_description".} 457 | proc get_language*(context: PContext): PLanguage{.cdecl, dynlib: lib, 458 | importc: "pango_context_get_language".} 459 | proc set_language*(context: PContext, language: PLanguage){.cdecl, 460 | dynlib: lib, importc: "pango_context_set_language".} 461 | proc set_base_dir*(context: PContext, direction: TDirection){.cdecl, 462 | dynlib: lib, importc: "pango_context_set_base_dir".} 463 | proc get_base_dir*(context: PContext): TDirection{.cdecl, dynlib: lib, 464 | importc: "pango_context_get_base_dir".} 465 | proc itemize*(context: PContext, text: cstring, start_index: int32, 466 | length: int32, attrs: PAttrList, cached_iter: PAttrIterator): PGList{. 467 | cdecl, dynlib: lib, importc: "pango_itemize".} 468 | proc coverage_new*(): PCoverage{.cdecl, dynlib: lib, 469 | importc: "pango_coverage_new".} 470 | proc reference*(coverage: PCoverage): PCoverage{.cdecl, dynlib: lib, 471 | importc: "pango_coverage_ref".} 472 | proc unref*(coverage: PCoverage){.cdecl, dynlib: lib, 473 | importc: "pango_coverage_unref".} 474 | proc copy*(coverage: PCoverage): PCoverage{.cdecl, dynlib: lib, 475 | importc: "pango_coverage_copy".} 476 | proc get*(coverage: PCoverage, index: int32): TCoverageLevel{.cdecl, 477 | dynlib: lib, importc: "pango_coverage_get".} 478 | proc set*(coverage: PCoverage, index: int32, level: TCoverageLevel){. 479 | cdecl, dynlib: lib, importc: "pango_coverage_set".} 480 | proc max*(coverage: PCoverage, other: PCoverage){.cdecl, dynlib: lib, 481 | importc: "pango_coverage_max".} 482 | proc to_bytes*(coverage: PCoverage, bytes: PPguchar, n_bytes: var int32){. 483 | cdecl, dynlib: lib, importc: "pango_coverage_to_bytes".} 484 | proc coverage_from_bytes*(bytes: Pguchar, n_bytes: int32): PCoverage{.cdecl, 485 | dynlib: lib, importc: "pango_coverage_from_bytes".} 486 | proc TYPE_FONTSET*(): GType 487 | proc FONTSET*(anObject: pointer): PFontset 488 | proc IS_FONTSET*(anObject: pointer): bool 489 | proc fontset_get_type*(): GType{.cdecl, dynlib: lib, 490 | importc: "pango_fontset_get_type".} 491 | proc get_font*(fontset: PFontset, wc: guint): PFont{.cdecl, dynlib: lib, 492 | importc: "pango_fontset_get_font".} 493 | proc get_metrics*(fontset: PFontset): PFontMetrics{.cdecl, dynlib: lib, 494 | importc: "pango_fontset_get_metrics".} 495 | const 496 | STYLE_NORMAL* = 0 497 | STYLE_OBLIQUE* = 1 498 | STYLE_ITALIC* = 2 499 | VARIANT_NORMAL* = 0 500 | VARIANT_SMALL_CAPS* = 1 501 | WEIGHT_ULTRALIGHT* = 200 502 | WEIGHT_LIGHT* = 300 503 | WEIGHT_NORMAL* = 400 504 | WEIGHT_BOLD* = 700 505 | WEIGHT_ULTRABOLD* = 800 506 | WEIGHT_HEAVY* = 900 507 | STRETCH_ULTRA_CONDENSED* = 0 508 | STRETCH_EXTRA_CONDENSED* = 1 509 | STRETCH_CONDENSED* = 2 510 | STRETCH_SEMI_CONDENSED* = 3 511 | STRETCH_NORMAL* = 4 512 | STRETCH_SEMI_EXPANDED* = 5 513 | STRETCH_EXPANDED* = 6 514 | STRETCH_EXTRA_EXPANDED* = 7 515 | STRETCH_ULTRA_EXPANDED* = 8 516 | FONT_MASK_FAMILY* = 1 shl 0 517 | FONT_MASK_STYLE* = 1 shl 1 518 | FONT_MASK_VARIANT* = 1 shl 2 519 | FONT_MASK_WEIGHT* = 1 shl 3 520 | FONT_MASK_STRETCH* = 1 shl 4 521 | FONT_MASK_SIZE* = 1 shl 5 522 | SCALE_XX_SMALL* = 0.578704 523 | SCALE_X_SMALL* = 0.644444 524 | SCALE_SMALL* = 0.833333 525 | SCALE_MEDIUM* = 1.00000 526 | SCALE_LARGE* = 1.20000 527 | SCALE_X_LARGE* = 1.44000 528 | SCALE_XX_LARGE* = 1.72800 529 | 530 | proc TYPE_FONT_DESCRIPTION*(): GType 531 | proc font_description_get_type*(): GType{.cdecl, dynlib: lib, 532 | importc: "pango_font_description_get_type".} 533 | proc font_description_new*(): PFontDescription{.cdecl, dynlib: lib, 534 | importc: "pango_font_description_new".} 535 | proc copy*(desc: PFontDescription): PFontDescription{.cdecl, 536 | dynlib: lib, importc: "pango_font_description_copy".} 537 | proc copy_static*(desc: PFontDescription): PFontDescription{. 538 | cdecl, dynlib: lib, importc: "pango_font_description_copy_static".} 539 | proc hash*(desc: PFontDescription): guint{.cdecl, dynlib: lib, 540 | importc: "pango_font_description_hash".} 541 | proc equal*(desc1: PFontDescription, desc2: PFontDescription): gboolean{. 542 | cdecl, dynlib: lib, importc: "pango_font_description_equal".} 543 | proc free*(desc: PFontDescription){.cdecl, dynlib: lib, 544 | importc: "pango_font_description_free".} 545 | proc font_descriptions_free*(descs: var PFontDescription, n_descs: int32){. 546 | cdecl, dynlib: lib, importc: "pango_font_descriptions_free".} 547 | proc set_family*(desc: PFontDescription, family: cstring){. 548 | cdecl, dynlib: lib, importc: "pango_font_description_set_family".} 549 | proc set_family_static*(desc: PFontDescription, family: cstring){. 550 | cdecl, dynlib: lib, importc: "pango_font_description_set_family_static".} 551 | proc get_family*(desc: PFontDescription): cstring{.cdecl, 552 | dynlib: lib, importc: "pango_font_description_get_family".} 553 | proc set_style*(desc: PFontDescription, style: TStyle){.cdecl, 554 | dynlib: lib, importc: "pango_font_description_set_style".} 555 | proc get_style*(desc: PFontDescription): TStyle{.cdecl, 556 | dynlib: lib, importc: "pango_font_description_get_style".} 557 | proc set_variant*(desc: PFontDescription, variant: TVariant){. 558 | cdecl, dynlib: lib, importc: "pango_font_description_set_variant".} 559 | proc get_variant*(desc: PFontDescription): TVariant{.cdecl, 560 | dynlib: lib, importc: "pango_font_description_get_variant".} 561 | proc set_weight*(desc: PFontDescription, weight: TWeight){. 562 | cdecl, dynlib: lib, importc: "pango_font_description_set_weight".} 563 | proc get_weight*(desc: PFontDescription): TWeight{.cdecl, 564 | dynlib: lib, importc: "pango_font_description_get_weight".} 565 | proc set_stretch*(desc: PFontDescription, stretch: TStretch){. 566 | cdecl, dynlib: lib, importc: "pango_font_description_set_stretch".} 567 | proc get_stretch*(desc: PFontDescription): TStretch{.cdecl, 568 | dynlib: lib, importc: "pango_font_description_get_stretch".} 569 | proc set_size*(desc: PFontDescription, size: gint){.cdecl, 570 | dynlib: lib, importc: "pango_font_description_set_size".} 571 | proc get_size*(desc: PFontDescription): gint{.cdecl, 572 | dynlib: lib, importc: "pango_font_description_get_size".} 573 | proc set_absolute_size*(desc: PFontDescription, size: float64){. 574 | cdecl, dynlib: lib, importc: "pango_font_description_set_absolute_size".} 575 | proc get_size_is_absolute*(desc: PFontDescription, 576 | size: float64): gboolean{.cdecl, dynlib: lib, importc: "pango_font_description_get_size_is_absolute".} 577 | proc get_set_fields*(desc: PFontDescription): TFontMask{.cdecl, 578 | dynlib: lib, importc: "pango_font_description_get_set_fields".} 579 | proc unset_fields*(desc: PFontDescription, to_unset: TFontMask){. 580 | cdecl, dynlib: lib, importc: "pango_font_description_unset_fields".} 581 | proc merge*(desc: PFontDescription, 582 | desc_to_merge: PFontDescription, 583 | replace_existing: gboolean){.cdecl, dynlib: lib, 584 | importc: "pango_font_description_merge".} 585 | proc merge_static*(desc: PFontDescription, 586 | desc_to_merge: PFontDescription, 587 | replace_existing: gboolean){.cdecl, 588 | dynlib: lib, importc: "pango_font_description_merge_static".} 589 | proc better_match*(desc: PFontDescription, 590 | old_match: PFontDescription, 591 | new_match: PFontDescription): gboolean{. 592 | cdecl, dynlib: lib, importc: "pango_font_description_better_match".} 593 | proc font_description_from_string*(str: cstring): PFontDescription{.cdecl, 594 | dynlib: lib, importc: "pango_font_description_from_string".} 595 | proc to_string*(desc: PFontDescription): cstring{.cdecl, 596 | dynlib: lib, importc: "pango_font_description_to_string".} 597 | proc to_filename*(desc: PFontDescription): cstring{.cdecl, 598 | dynlib: lib, importc: "pango_font_description_to_filename".} 599 | proc TYPE_FONT_METRICS*(): GType 600 | proc font_metrics_get_type*(): GType{.cdecl, dynlib: lib, 601 | importc: "pango_font_metrics_get_type".} 602 | proc reference*(metrics: PFontMetrics): PFontMetrics{.cdecl, dynlib: lib, 603 | importc: "pango_font_metrics_ref".} 604 | proc unref*(metrics: PFontMetrics){.cdecl, dynlib: lib, 605 | importc: "pango_font_metrics_unref".} 606 | proc get_ascent*(metrics: PFontMetrics): int32{.cdecl, dynlib: lib, 607 | importc: "pango_font_metrics_get_ascent".} 608 | proc get_descent*(metrics: PFontMetrics): int32{.cdecl, 609 | dynlib: lib, importc: "pango_font_metrics_get_descent".} 610 | proc get_approximate_char_width*(metrics: PFontMetrics): int32{. 611 | cdecl, dynlib: lib, importc: "pango_font_metrics_get_approximate_char_width".} 612 | proc get_approximate_digit_width*(metrics: PFontMetrics): int32{. 613 | cdecl, dynlib: lib, 614 | importc: "pango_font_metrics_get_approximate_digit_width".} 615 | proc TYPE_FONT_FAMILY*(): GType 616 | proc FONT_FAMILY*(anObject: pointer): PFontFamily 617 | proc IS_FONT_FAMILY*(anObject: pointer): bool 618 | proc font_family_get_type*(): GType{.cdecl, dynlib: lib, 619 | importc: "pango_font_family_get_type".} 620 | proc list_faces*(family: PFontFamily, 621 | faces: var openarray[ptr PFontFace]){.cdecl, 622 | dynlib: lib, importc: "pango_font_family_list_faces".} 623 | proc get_name*(family: PFontFamily): cstring{.cdecl, dynlib: lib, 624 | importc: "pango_font_family_get_name".} 625 | proc TYPE_FONT_FACE*(): GType 626 | proc FONT_FACE*(anObject: pointer): PFontFace 627 | proc IS_FONT_FACE*(anObject: pointer): bool 628 | proc font_face_get_type*(): GType{.cdecl, dynlib: lib, 629 | importc: "pango_font_face_get_type".} 630 | proc describe*(face: PFontFace): PFontDescription{.cdecl, dynlib: lib, 631 | importc: "pango_font_face_describe".} 632 | proc get_face_name*(face: PFontFace): cstring{.cdecl, dynlib: lib, 633 | importc: "pango_font_face_get_face_name".} 634 | proc TYPE_FONT*(): GType 635 | proc FONT*(anObject: pointer): PFont 636 | proc IS_FONT*(anObject: pointer): bool 637 | proc font_get_type*(): GType{.cdecl, dynlib: lib, importc: "pango_font_get_type".} 638 | proc describe*(font: PFont): PFontDescription{.cdecl, dynlib: lib, 639 | importc: "pango_font_describe".} 640 | proc get_coverage*(font: PFont, language: PLanguage): PCoverage{.cdecl, 641 | dynlib: lib, importc: "pango_font_get_coverage".} 642 | proc find_shaper*(font: PFont, language: PLanguage, ch: guint32): PEngineShape{. 643 | cdecl, dynlib: lib, importc: "pango_font_find_shaper".} 644 | proc get_metrics*(font: PFont, language: PLanguage): PFontMetrics{.cdecl, 645 | dynlib: lib, importc: "pango_font_get_metrics".} 646 | proc get_glyph_extents*(font: PFont, glyph: TGlyph, ink_rect: PRectangle, 647 | logical_rect: PRectangle){.cdecl, dynlib: lib, 648 | importc: "pango_font_get_glyph_extents".} 649 | proc TYPE_FONT_MAP*(): GType 650 | proc FONT_MAP*(anObject: pointer): PFontMap 651 | proc IS_FONT_MAP*(anObject: pointer): bool 652 | proc font_map_get_type*(): GType{.cdecl, dynlib: lib, 653 | importc: "pango_font_map_get_type".} 654 | proc load_font*(fontmap: PFontMap, context: PContext, 655 | desc: PFontDescription): PFont{.cdecl, dynlib: lib, 656 | importc: "pango_font_map_load_font".} 657 | proc load_fontset*(fontmap: PFontMap, context: PContext, 658 | desc: PFontDescription, language: PLanguage): PFontset{. 659 | cdecl, dynlib: lib, importc: "pango_font_map_load_fontset".} 660 | proc list_families*(fontmap: PFontMap, 661 | families: var openarray[ptr PFontFamily]){.cdecl, 662 | dynlib: lib, importc: "pango_font_map_list_families".} 663 | const 664 | bm_TPangoGlyphVisAttr_is_cluster_start* = 0x0001'u16 665 | bp_TPangoGlyphVisAttr_is_cluster_start* = 0'u16 666 | 667 | proc is_cluster_start*(a: PGlyphVisAttr): guint 668 | proc set_is_cluster_start*(a: PGlyphVisAttr, `is_cluster_start`: guint) 669 | proc TYPE_GLYPH_STRING*(): GType 670 | proc glyph_string_new*(): PGlyphString{.cdecl, dynlib: lib, 671 | importc: "pango_glyph_string_new".} 672 | proc glyph_string_set_size*(`string`: PGlyphString, new_len: gint){.cdecl, 673 | dynlib: lib, importc: "pango_glyph_string_set_size".} 674 | proc glyph_string_get_type*(): GType{.cdecl, dynlib: lib, 675 | importc: "pango_glyph_string_get_type".} 676 | proc glyph_string_copy*(`string`: PGlyphString): PGlyphString{.cdecl, 677 | dynlib: lib, importc: "pango_glyph_string_copy".} 678 | proc glyph_string_free*(`string`: PGlyphString){.cdecl, dynlib: lib, 679 | importc: "pango_glyph_string_free".} 680 | proc extents*(glyphs: PGlyphString, font: PFont, 681 | ink_rect: PRectangle, logical_rect: PRectangle){. 682 | cdecl, dynlib: lib, importc: "pango_glyph_string_extents".} 683 | proc extents_range*(glyphs: PGlyphString, start: int32, 684 | theEnd: int32, font: PFont, 685 | ink_rect: PRectangle, logical_rect: PRectangle){. 686 | cdecl, dynlib: lib, importc: "pango_glyph_string_extents_range".} 687 | proc get_logical_widths*(glyphs: PGlyphString, text: cstring, 688 | length: int32, embedding_level: int32, 689 | logical_widths: var int32){.cdecl, 690 | dynlib: lib, importc: "pango_glyph_string_get_logical_widths".} 691 | proc index_to_x*(glyphs: PGlyphString, text: cstring, 692 | length: int32, analysis: PAnalysis, index: int32, 693 | trailing: gboolean, x_pos: var int32){.cdecl, 694 | dynlib: lib, importc: "pango_glyph_string_index_to_x".} 695 | proc x_to_index*(glyphs: PGlyphString, text: cstring, 696 | length: int32, analysis: PAnalysis, x_pos: int32, 697 | index, trailing: var int32){.cdecl, dynlib: lib, 698 | importc: "pango_glyph_string_x_to_index".} 699 | proc shape*(text: cstring, length: gint, analysis: PAnalysis, 700 | glyphs: PGlyphString){.cdecl, dynlib: lib, importc: "pango_shape".} 701 | proc reorder_items*(logical_items: PGList): PGList{.cdecl, dynlib: lib, 702 | importc: "pango_reorder_items".} 703 | proc item_new*(): PItem{.cdecl, dynlib: lib, importc: "pango_item_new".} 704 | proc copy*(item: PItem): PItem{.cdecl, dynlib: lib, 705 | importc: "pango_item_copy".} 706 | proc free*(item: PItem){.cdecl, dynlib: lib, importc: "pango_item_free".} 707 | proc split*(orig: PItem, split_index: int32, split_offset: int32): PItem{. 708 | cdecl, dynlib: lib, importc: "pango_item_split".} 709 | proc TYPE_LAYOUT*(): GType 710 | proc LAYOUT*(anObject: pointer): PLayout 711 | proc LAYOUT_CLASS*(klass: pointer): PLayoutClass 712 | proc IS_LAYOUT*(anObject: pointer): bool 713 | proc IS_LAYOUT_CLASS*(klass: pointer): bool 714 | proc GET_CLASS*(obj: PLayout): PLayoutClass 715 | proc layout_get_type*(): GType{.cdecl, dynlib: lib, 716 | importc: "pango_layout_get_type".} 717 | proc layout_new*(context: PContext): PLayout{.cdecl, dynlib: lib, 718 | importc: "pango_layout_new".} 719 | proc copy*(src: PLayout): PLayout{.cdecl, dynlib: lib, 720 | importc: "pango_layout_copy".} 721 | proc get_context*(layout: PLayout): PContext{.cdecl, dynlib: lib, 722 | importc: "pango_layout_get_context".} 723 | proc set_attributes*(layout: PLayout, attrs: PAttrList){.cdecl, 724 | dynlib: lib, importc: "pango_layout_set_attributes".} 725 | proc get_attributes*(layout: PLayout): PAttrList{.cdecl, dynlib: lib, 726 | importc: "pango_layout_get_attributes".} 727 | proc set_text*(layout: PLayout, text: cstring, length: int32){.cdecl, 728 | dynlib: lib, importc: "pango_layout_set_text".} 729 | proc get_text*(layout: PLayout): cstring{.cdecl, dynlib: lib, 730 | importc: "pango_layout_get_text".} 731 | proc set_markup*(layout: PLayout, markup: cstring, length: int32){.cdecl, 732 | dynlib: lib, importc: "pango_layout_set_markup".} 733 | proc set_markup*(layout: PLayout, markup: cstring, 734 | length: int32, accel_marker: gunichar, 735 | accel_char: Pgunichar){.cdecl, dynlib: lib, 736 | importc: "pango_layout_set_markup_with_accel".} 737 | proc set_font_description*(layout: PLayout, desc: PFontDescription){. 738 | cdecl, dynlib: lib, importc: "pango_layout_set_font_description".} 739 | proc set_width*(layout: PLayout, width: int32){.cdecl, dynlib: lib, 740 | importc: "pango_layout_set_width".} 741 | proc get_width*(layout: PLayout): int32{.cdecl, dynlib: lib, 742 | importc: "pango_layout_get_width".} 743 | proc set_wrap*(layout: PLayout, wrap: TWrapMode){.cdecl, dynlib: lib, 744 | importc: "pango_layout_set_wrap".} 745 | proc get_wrap*(layout: PLayout): TWrapMode{.cdecl, dynlib: lib, 746 | importc: "pango_layout_get_wrap".} 747 | proc set_indent*(layout: PLayout, indent: int32){.cdecl, dynlib: lib, 748 | importc: "pango_layout_set_indent".} 749 | proc get_indent*(layout: PLayout): int32{.cdecl, dynlib: lib, 750 | importc: "pango_layout_get_indent".} 751 | proc set_spacing*(layout: PLayout, spacing: int32){.cdecl, dynlib: lib, 752 | importc: "pango_layout_set_spacing".} 753 | proc get_spacing*(layout: PLayout): int32{.cdecl, dynlib: lib, 754 | importc: "pango_layout_get_spacing".} 755 | proc set_justify*(layout: PLayout, justify: gboolean){.cdecl, 756 | dynlib: lib, importc: "pango_layout_set_justify".} 757 | proc get_justify*(layout: PLayout): gboolean{.cdecl, dynlib: lib, 758 | importc: "pango_layout_get_justify".} 759 | proc set_alignment*(layout: PLayout, alignment: TAlignment){.cdecl, 760 | dynlib: lib, importc: "pango_layout_set_alignment".} 761 | proc get_alignment*(layout: PLayout): TAlignment{.cdecl, dynlib: lib, 762 | importc: "pango_layout_get_alignment".} 763 | proc set_tabs*(layout: PLayout, tabs: PTabArray){.cdecl, dynlib: lib, 764 | importc: "pango_layout_set_tabs".} 765 | proc get_tabs*(layout: PLayout): PTabArray{.cdecl, dynlib: lib, 766 | importc: "pango_layout_get_tabs".} 767 | proc set_single_paragraph_mode*(layout: PLayout, setting: gboolean){. 768 | cdecl, dynlib: lib, importc: "pango_layout_set_single_paragraph_mode".} 769 | proc get_single_paragraph_mode*(layout: PLayout): gboolean{.cdecl, 770 | dynlib: lib, importc: "pango_layout_get_single_paragraph_mode".} 771 | proc context_changed*(layout: PLayout){.cdecl, dynlib: lib, 772 | importc: "pango_layout_context_changed".} 773 | proc get_log_attrs*(layout: PLayout, attrs: var PLogAttr, n_attrs: Pgint){. 774 | cdecl, dynlib: lib, importc: "pango_layout_get_log_attrs".} 775 | proc index_to_pos*(layout: PLayout, index: int32, pos: PRectangle){. 776 | cdecl, dynlib: lib, importc: "pango_layout_index_to_pos".} 777 | proc get_cursor_pos*(layout: PLayout, index: int32, 778 | strong_pos: PRectangle, weak_pos: PRectangle){. 779 | cdecl, dynlib: lib, importc: "pango_layout_get_cursor_pos".} 780 | proc move_cursor_visually*(layout: PLayout, strong: gboolean, 781 | old_index: int32, old_trailing: int32, 782 | direction: int32, 783 | new_index, new_trailing: var int32){.cdecl, 784 | dynlib: lib, importc: "pango_layout_move_cursor_visually".} 785 | proc xy_to_index*(layout: PLayout, x: int32, y: int32, 786 | index, trailing: var int32): gboolean{.cdecl, 787 | dynlib: lib, importc: "pango_layout_xy_to_index".} 788 | proc get_extents*(layout: PLayout, ink_rect: PRectangle, 789 | logical_rect: PRectangle){.cdecl, dynlib: lib, 790 | importc: "pango_layout_get_extents".} 791 | proc get_pixel_extents*(layout: PLayout, ink_rect: PRectangle, 792 | logical_rect: PRectangle){.cdecl, dynlib: lib, 793 | importc: "pango_layout_get_pixel_extents".} 794 | proc get_size*(layout: PLayout, width: var int32, height: var int32){. 795 | cdecl, dynlib: lib, importc: "pango_layout_get_size".} 796 | proc get_pixel_size*(layout: PLayout, width: var int32, height: var int32){. 797 | cdecl, dynlib: lib, importc: "pango_layout_get_pixel_size".} 798 | proc get_line_count*(layout: PLayout): int32{.cdecl, dynlib: lib, 799 | importc: "pango_layout_get_line_count".} 800 | proc get_line*(layout: PLayout, line: int32): PLayoutLine{.cdecl, 801 | dynlib: lib, importc: "pango_layout_get_line".} 802 | proc get_lines*(layout: PLayout): PGSList{.cdecl, dynlib: lib, 803 | importc: "pango_layout_get_lines".} 804 | proc reference*(line: PLayoutLine){.cdecl, dynlib: lib, 805 | importc: "pango_layout_line_ref".} 806 | proc unref*(line: PLayoutLine){.cdecl, dynlib: lib, 807 | importc: "pango_layout_line_unref".} 808 | proc x_to_index*(line: PLayoutLine, x_pos: int32, index: var int32, 809 | trailing: var int32): gboolean{.cdecl, dynlib: lib, 810 | importc: "pango_layout_line_x_to_index".} 811 | proc index_to_x*(line: PLayoutLine, index: int32, 812 | trailing: gboolean, x_pos: var int32){.cdecl, 813 | dynlib: lib, importc: "pango_layout_line_index_to_x".} 814 | proc get_extents*(line: PLayoutLine, ink_rect: PRectangle, 815 | logical_rect: PRectangle){.cdecl, dynlib: lib, 816 | importc: "pango_layout_line_get_extents".} 817 | proc get_pixel_extents*(layout_line: PLayoutLine, 818 | ink_rect: PRectangle, 819 | logical_rect: PRectangle){.cdecl, 820 | dynlib: lib, importc: "pango_layout_line_get_pixel_extents".} 821 | proc get_iter*(layout: PLayout): PLayoutIter{.cdecl, dynlib: lib, 822 | importc: "pango_layout_get_iter".} 823 | proc free*(iter: PLayoutIter){.cdecl, dynlib: lib, 824 | importc: "pango_layout_iter_free".} 825 | proc get_index*(iter: PLayoutIter): int32{.cdecl, dynlib: lib, 826 | importc: "pango_layout_iter_get_index".} 827 | proc get_run*(iter: PLayoutIter): PLayoutRun{.cdecl, dynlib: lib, 828 | importc: "pango_layout_iter_get_run".} 829 | proc get_line*(iter: PLayoutIter): PLayoutLine{.cdecl, dynlib: lib, 830 | importc: "pango_layout_iter_get_line".} 831 | proc at_last_line*(iter: PLayoutIter): gboolean{.cdecl, dynlib: lib, 832 | importc: "pango_layout_iter_at_last_line".} 833 | proc next_char*(iter: PLayoutIter): gboolean{.cdecl, dynlib: lib, 834 | importc: "pango_layout_iter_next_char".} 835 | proc next_cluster*(iter: PLayoutIter): gboolean{.cdecl, dynlib: lib, 836 | importc: "pango_layout_iter_next_cluster".} 837 | proc next_run*(iter: PLayoutIter): gboolean{.cdecl, dynlib: lib, 838 | importc: "pango_layout_iter_next_run".} 839 | proc next_line*(iter: PLayoutIter): gboolean{.cdecl, dynlib: lib, 840 | importc: "pango_layout_iter_next_line".} 841 | proc get_char_extents*(iter: PLayoutIter, logical_rect: PRectangle){. 842 | cdecl, dynlib: lib, importc: "pango_layout_iter_get_char_extents".} 843 | proc get_cluster_extents*(iter: PLayoutIter, ink_rect: PRectangle, 844 | logical_rect: PRectangle){.cdecl, 845 | dynlib: lib, importc: "pango_layout_iter_get_cluster_extents".} 846 | proc get_run_extents*(iter: PLayoutIter, ink_rect: PRectangle, 847 | logical_rect: PRectangle){.cdecl, dynlib: lib, 848 | importc: "pango_layout_iter_get_run_extents".} 849 | proc get_line_extents*(iter: PLayoutIter, ink_rect: PRectangle, 850 | logical_rect: PRectangle){.cdecl, 851 | dynlib: lib, importc: "pango_layout_iter_get_line_extents".} 852 | proc get_line_yrange*(iter: PLayoutIter, y0: var int32, 853 | y1: var int32){.cdecl, dynlib: lib, 854 | importc: "pango_layout_iter_get_line_yrange".} 855 | proc get_layout_extents*(iter: PLayoutIter, ink_rect: PRectangle, 856 | logical_rect: PRectangle){.cdecl, 857 | dynlib: lib, importc: "pango_layout_iter_get_layout_extents".} 858 | proc get_baseline*(iter: PLayoutIter): int32{.cdecl, dynlib: lib, 859 | importc: "pango_layout_iter_get_baseline".} 860 | proc TYPE_TAB_ARRAY*(): GType 861 | proc tab_array_new*(initial_size: gint, positions_in_pixels: gboolean): PTabArray{. 862 | cdecl, dynlib: lib, importc: "pango_tab_array_new".} 863 | proc tab_array_get_type*(): GType{.cdecl, dynlib: lib, 864 | importc: "pango_tab_array_get_type".} 865 | proc copy*(src: PTabArray): PTabArray{.cdecl, dynlib: lib, 866 | importc: "pango_tab_array_copy".} 867 | proc free*(tab_array: PTabArray){.cdecl, dynlib: lib, 868 | importc: "pango_tab_array_free".} 869 | proc get_size*(tab_array: PTabArray): gint{.cdecl, dynlib: lib, 870 | importc: "pango_tab_array_get_size".} 871 | proc resize*(tab_array: PTabArray, new_size: gint){.cdecl, 872 | dynlib: lib, importc: "pango_tab_array_resize".} 873 | proc set_tab*(tab_array: PTabArray, tab_index: gint, 874 | alignment: TTabAlign, location: gint){.cdecl, 875 | dynlib: lib, importc: "pango_tab_array_set_tab".} 876 | proc get_tab*(tab_array: PTabArray, tab_index: gint, 877 | alignment: PTabAlign, location: Pgint){.cdecl, 878 | dynlib: lib, importc: "pango_tab_array_get_tab".} 879 | proc get_positions_in_pixels*(tab_array: PTabArray): gboolean{.cdecl, 880 | dynlib: lib, importc: "pango_tab_array_get_positions_in_pixels".} 881 | proc ASCENT*(rect: TRectangle): int32 = 882 | result = -rect.y 883 | 884 | proc DESCENT*(rect: TRectangle): int32 = 885 | result = (rect.y) + (rect.height) 886 | 887 | proc LBEARING*(rect: TRectangle): int32 = 888 | result = rect.x 889 | 890 | proc RBEARING*(rect: TRectangle): int32 = 891 | result = (rect.x) + (rect.width) 892 | 893 | proc TYPE_LANGUAGE*(): GType = 894 | result = language_get_type() 895 | 896 | proc to_string*(language: PLanguage): cstring = 897 | result = cast[cstring](language) 898 | 899 | proc PIXELS*(d: int): int = 900 | if d >= 0: 901 | result = (d + (SCALE div 2)) div SCALE 902 | else: 903 | result = (d - (SCALE div 2)) div SCALE 904 | 905 | proc TYPE_COLOR*(): GType = 906 | result = color_get_type() 907 | 908 | proc TYPE_ATTR_LIST*(): GType = 909 | result = attr_list_get_type() 910 | 911 | proc is_line_break*(a: PLogAttr): guint = 912 | result = (a.flag0 and bm_TPangoLogAttr_is_line_break) shr 913 | bp_TPangoLogAttr_is_line_break 914 | 915 | proc set_is_line_break*(a: PLogAttr, `is_line_break`: guint) = 916 | a.flag0 = a.flag0 or 917 | (uint16(`is_line_break` shl bp_TPangoLogAttr_is_line_break) and 918 | bm_TPangoLogAttr_is_line_break) 919 | 920 | proc is_mandatory_break*(a: PLogAttr): guint = 921 | result = ((a.flag0 and bm_TPangoLogAttr_is_mandatory_break) shr 922 | bp_TPangoLogAttr_is_mandatory_break).guint 923 | 924 | proc set_is_mandatory_break*(a: PLogAttr, `is_mandatory_break`: guint) = 925 | a.flag0 = a.flag0 or 926 | (uint16(`is_mandatory_break` shl bp_TPangoLogAttr_is_mandatory_break) and 927 | bm_TPangoLogAttr_is_mandatory_break) 928 | 929 | proc is_char_break*(a: PLogAttr): guint = 930 | result = ((a.flag0 and bm_TPangoLogAttr_is_char_break) shr 931 | bp_TPangoLogAttr_is_char_break).guint 932 | 933 | proc set_is_char_break*(a: PLogAttr, `is_char_break`: guint) = 934 | a.flag0 = a.flag0 or 935 | (uint16(`is_char_break` shl bp_TPangoLogAttr_is_char_break) and 936 | bm_TPangoLogAttr_is_char_break) 937 | 938 | proc is_white*(a: PLogAttr): guint = 939 | result = ((a.flag0 and bm_TPangoLogAttr_is_white) shr 940 | bp_TPangoLogAttr_is_white).guint 941 | 942 | proc set_is_white*(a: PLogAttr, `is_white`: guint) = 943 | a.flag0 = a.flag0 or 944 | (uint16(`is_white` shl bp_TPangoLogAttr_is_white) and 945 | bm_TPangoLogAttr_is_white) 946 | 947 | proc is_cursor_position*(a: PLogAttr): guint = 948 | result = ((a.flag0 and bm_TPangoLogAttr_is_cursor_position) shr 949 | bp_TPangoLogAttr_is_cursor_position).guint 950 | 951 | proc set_is_cursor_position*(a: PLogAttr, `is_cursor_position`: guint) = 952 | a.flag0 = a.flag0 or 953 | (uint16(`is_cursor_position` shl bp_TPangoLogAttr_is_cursor_position) and 954 | bm_TPangoLogAttr_is_cursor_position) 955 | 956 | proc is_word_start*(a: PLogAttr): guint = 957 | result = ((a.flag0 and bm_TPangoLogAttr_is_word_start) shr 958 | bp_TPangoLogAttr_is_word_start).guint 959 | 960 | proc set_is_word_start*(a: PLogAttr, `is_word_start`: guint) = 961 | a.flag0 = a.flag0 or 962 | (uint16(`is_word_start` shl bp_TPangoLogAttr_is_word_start) and 963 | bm_TPangoLogAttr_is_word_start) 964 | 965 | proc is_word_end*(a: PLogAttr): guint = 966 | result = ((a.flag0 and bm_TPangoLogAttr_is_word_end) shr 967 | bp_TPangoLogAttr_is_word_end).guint 968 | 969 | proc set_is_word_end*(a: PLogAttr, `is_word_end`: guint) = 970 | a.flag0 = a.flag0 or 971 | (uint16(`is_word_end` shl bp_TPangoLogAttr_is_word_end) and 972 | bm_TPangoLogAttr_is_word_end) 973 | 974 | proc is_sentence_boundary*(a: PLogAttr): guint = 975 | result = ((a.flag0 and bm_TPangoLogAttr_is_sentence_boundary) shr 976 | bp_TPangoLogAttr_is_sentence_boundary).guint 977 | 978 | proc set_is_sentence_boundary*(a: PLogAttr, `is_sentence_boundary`: guint) = 979 | a.flag0 = a.flag0 or 980 | (uint16(`is_sentence_boundary` shl bp_TPangoLogAttr_is_sentence_boundary) and 981 | bm_TPangoLogAttr_is_sentence_boundary) 982 | 983 | proc is_sentence_start*(a: PLogAttr): guint = 984 | result = ((a.flag0 and bm_TPangoLogAttr_is_sentence_start) shr 985 | bp_TPangoLogAttr_is_sentence_start).guint 986 | 987 | proc set_is_sentence_start*(a: PLogAttr, `is_sentence_start`: guint) = 988 | a.flag0 = a.flag0 or 989 | (uint16(`is_sentence_start` shl bp_TPangoLogAttr_is_sentence_start) and 990 | bm_TPangoLogAttr_is_sentence_start) 991 | 992 | proc is_sentence_end*(a: PLogAttr): guint = 993 | result = ((a.flag0 and bm_TPangoLogAttr_is_sentence_end) shr 994 | bp_TPangoLogAttr_is_sentence_end).guint 995 | 996 | proc set_is_sentence_end*(a: PLogAttr, `is_sentence_end`: guint) = 997 | a.flag0 = a.flag0 or 998 | (uint16(`is_sentence_end` shl bp_TPangoLogAttr_is_sentence_end) and 999 | bm_TPangoLogAttr_is_sentence_end) 1000 | 1001 | proc TYPE_CONTEXT*(): GType = 1002 | result = context_get_type() 1003 | 1004 | proc CONTEXT*(anObject: pointer): PContext = 1005 | result = cast[PContext](G_TYPE_CHECK_INSTANCE_CAST(anObject, TYPE_CONTEXT())) 1006 | 1007 | proc CONTEXT_CLASS*(klass: pointer): PContextClass = 1008 | result = cast[PContextClass](G_TYPE_CHECK_CLASS_CAST(klass, TYPE_CONTEXT())) 1009 | 1010 | proc IS_CONTEXT*(anObject: pointer): bool = 1011 | result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_CONTEXT()) 1012 | 1013 | proc IS_CONTEXT_CLASS*(klass: pointer): bool = 1014 | result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_CONTEXT()) 1015 | 1016 | proc GET_CLASS*(obj: PContext): PContextClass = 1017 | result = cast[PContextClass](G_TYPE_INSTANCE_GET_CLASS(obj, TYPE_CONTEXT())) 1018 | 1019 | proc TYPE_FONTSET*(): GType = 1020 | result = fontset_get_type() 1021 | 1022 | proc FONTSET*(anObject: pointer): PFontset = 1023 | result = cast[PFontset](G_TYPE_CHECK_INSTANCE_CAST(anObject, TYPE_FONTSET())) 1024 | 1025 | proc IS_FONTSET*(anObject: pointer): bool = 1026 | result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_FONTSET()) 1027 | 1028 | proc FONTSET_CLASS*(klass: pointer): PFontsetClass = 1029 | result = cast[PFontsetClass](G_TYPE_CHECK_CLASS_CAST(klass, TYPE_FONTSET())) 1030 | 1031 | proc IS_FONTSET_CLASS*(klass: pointer): bool = 1032 | result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_FONTSET()) 1033 | 1034 | proc GET_CLASS*(obj: PFontset): PFontsetClass = 1035 | result = cast[PFontsetClass](G_TYPE_INSTANCE_GET_CLASS(obj, TYPE_FONTSET())) 1036 | 1037 | proc fontset_simple_get_type(): GType{.importc: "pango_fontset_simple_get_type", 1038 | cdecl, dynlib: lib.} 1039 | proc TYPE_FONTSET_SIMPLE*(): GType = 1040 | result = fontset_simple_get_type() 1041 | 1042 | proc FONTSET_SIMPLE*(anObject: pointer): PFontsetSimple = 1043 | result = cast[PFontsetSimple](G_TYPE_CHECK_INSTANCE_CAST(anObject, 1044 | TYPE_FONTSET_SIMPLE())) 1045 | 1046 | proc IS_FONTSET_SIMPLE*(anObject: pointer): bool = 1047 | result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_FONTSET_SIMPLE()) 1048 | 1049 | proc TYPE_FONT_DESCRIPTION*(): GType = 1050 | result = font_description_get_type() 1051 | 1052 | proc TYPE_FONT_METRICS*(): GType = 1053 | result = font_metrics_get_type() 1054 | 1055 | proc TYPE_FONT_FAMILY*(): GType = 1056 | result = font_family_get_type() 1057 | 1058 | proc FONT_FAMILY*(anObject: pointer): PFontFamily = 1059 | result = cast[PFontFamily](G_TYPE_CHECK_INSTANCE_CAST(anObject, 1060 | TYPE_FONT_FAMILY())) 1061 | 1062 | proc IS_FONT_FAMILY*(anObject: pointer): bool = 1063 | result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_FONT_FAMILY()) 1064 | 1065 | proc FONT_FAMILY_CLASS*(klass: pointer): PFontFamilyClass = 1066 | result = cast[PFontFamilyClass](G_TYPE_CHECK_CLASS_CAST(klass, 1067 | TYPE_FONT_FAMILY())) 1068 | 1069 | proc IS_FONT_FAMILY_CLASS*(klass: pointer): bool = 1070 | result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_FONT_FAMILY()) 1071 | 1072 | proc GET_CLASS*(obj: PFontFamily): PFontFamilyClass = 1073 | result = cast[PFontFamilyClass](G_TYPE_INSTANCE_GET_CLASS(obj, 1074 | TYPE_FONT_FAMILY())) 1075 | 1076 | proc TYPE_FONT_FACE*(): GType = 1077 | result = font_face_get_type() 1078 | 1079 | proc FONT_FACE*(anObject: pointer): PFontFace = 1080 | result = cast[PFontFace](G_TYPE_CHECK_INSTANCE_CAST(anObject, TYPE_FONT_FACE())) 1081 | 1082 | proc IS_FONT_FACE*(anObject: pointer): bool = 1083 | result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_FONT_FACE()) 1084 | 1085 | proc FONT_FACE_CLASS*(klass: pointer): PFontFaceClass = 1086 | result = cast[PFontFaceClass](G_TYPE_CHECK_CLASS_CAST(klass, TYPE_FONT_FACE())) 1087 | 1088 | proc IS_FONT_FACE_CLASS*(klass: pointer): bool = 1089 | result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_FONT_FACE()) 1090 | 1091 | proc FONT_FACE_GET_CLASS*(obj: pointer): PFontFaceClass = 1092 | result = cast[PFontFaceClass](G_TYPE_INSTANCE_GET_CLASS(obj, TYPE_FONT_FACE())) 1093 | 1094 | proc TYPE_FONT*(): GType = 1095 | result = font_get_type() 1096 | 1097 | proc FONT*(anObject: pointer): PFont = 1098 | result = cast[PFont](G_TYPE_CHECK_INSTANCE_CAST(anObject, TYPE_FONT())) 1099 | 1100 | proc IS_FONT*(anObject: pointer): bool = 1101 | result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_FONT()) 1102 | 1103 | proc FONT_CLASS*(klass: pointer): PFontClass = 1104 | result = cast[PFontClass](G_TYPE_CHECK_CLASS_CAST(klass, TYPE_FONT())) 1105 | 1106 | proc IS_FONT_CLASS*(klass: pointer): bool = 1107 | result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_FONT()) 1108 | 1109 | proc GET_CLASS*(obj: PFont): PFontClass = 1110 | result = cast[PFontClass](G_TYPE_INSTANCE_GET_CLASS(obj, TYPE_FONT())) 1111 | 1112 | proc TYPE_FONT_MAP*(): GType = 1113 | result = font_map_get_type() 1114 | 1115 | proc FONT_MAP*(anObject: pointer): PFontmap = 1116 | result = cast[PFontmap](G_TYPE_CHECK_INSTANCE_CAST(anObject, TYPE_FONT_MAP())) 1117 | 1118 | proc IS_FONT_MAP*(anObject: pointer): bool = 1119 | result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_FONT_MAP()) 1120 | 1121 | proc FONT_MAP_CLASS*(klass: pointer): PFontMapClass = 1122 | result = cast[PFontMapClass](G_TYPE_CHECK_CLASS_CAST(klass, TYPE_FONT_MAP())) 1123 | 1124 | proc IS_FONT_MAP_CLASS*(klass: pointer): bool = 1125 | result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_FONT_MAP()) 1126 | 1127 | proc GET_CLASS*(obj: PFontMap): PFontMapClass = 1128 | result = cast[PFontMapClass](G_TYPE_INSTANCE_GET_CLASS(obj, TYPE_FONT_MAP())) 1129 | 1130 | proc is_cluster_start*(a: PGlyphVisAttr): guint = 1131 | result = (a.flag0 and bm_TPangoGlyphVisAttr_is_cluster_start) shr 1132 | bp_TPangoGlyphVisAttr_is_cluster_start 1133 | 1134 | proc set_is_cluster_start*(a: PGlyphVisAttr, `is_cluster_start`: guint) = 1135 | a.flag0 = a.flag0 or 1136 | (uint16(`is_cluster_start` shl bp_TPangoGlyphVisAttr_is_cluster_start) and 1137 | bm_TPangoGlyphVisAttr_is_cluster_start) 1138 | 1139 | proc TYPE_GLYPH_STRING*(): GType = 1140 | result = glyph_string_get_type() 1141 | 1142 | proc TYPE_LAYOUT*(): GType = 1143 | result = layout_get_type() 1144 | 1145 | proc LAYOUT*(anObject: pointer): PLayout = 1146 | result = cast[PLayout](G_TYPE_CHECK_INSTANCE_CAST(anObject, TYPE_LAYOUT())) 1147 | 1148 | proc LAYOUT_CLASS*(klass: pointer): PLayoutClass = 1149 | result = cast[PLayoutClass](G_TYPE_CHECK_CLASS_CAST(klass, TYPE_LAYOUT())) 1150 | 1151 | proc IS_LAYOUT*(anObject: pointer): bool = 1152 | result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, TYPE_LAYOUT()) 1153 | 1154 | proc IS_LAYOUT_CLASS*(klass: pointer): bool = 1155 | result = G_TYPE_CHECK_CLASS_TYPE(klass, TYPE_LAYOUT()) 1156 | 1157 | proc GET_CLASS*(obj: PLayout): PLayoutClass = 1158 | result = cast[PLayoutClass](G_TYPE_INSTANCE_GET_CLASS(obj, TYPE_LAYOUT())) 1159 | 1160 | proc TYPE_TAB_ARRAY*(): GType = 1161 | result = tab_array_get_type() 1162 | 1163 | {.pop.} 1164 | -------------------------------------------------------------------------------- /src/pangoutils.nim: -------------------------------------------------------------------------------- 1 | {.deadCodeElim: on.} 2 | import 3 | glib2, pango 4 | 5 | proc split_file_list*(str: cstring): PPchar{.cdecl, dynlib: lib, 6 | importc: "pango_split_file_list".} 7 | proc trim_string*(str: cstring): cstring{.cdecl, dynlib: lib, 8 | importc: "pango_trim_string".} 9 | proc read_line*(stream: TFile, str: PGString): gint{.cdecl, dynlib: lib, 10 | importc: "pango_read_line".} 11 | proc skip_space*(pos: PPchar): gboolean{.cdecl, dynlib: lib, 12 | importc: "pango_skip_space".} 13 | proc scan_word*(pos: PPchar, OutStr: PGString): gboolean{.cdecl, dynlib: lib, 14 | importc: "pango_scan_word".} 15 | proc scan_string*(pos: PPchar, OutStr: PGString): gboolean{.cdecl, dynlib: lib, 16 | importc: "pango_scan_string".} 17 | proc scan_int*(pos: PPchar, OutInt: ptr int32): gboolean{.cdecl, dynlib: lib, 18 | importc: "pango_scan_int".} 19 | proc config_key_get*(key: cstring): cstring{.cdecl, dynlib: lib, 20 | importc: "pango_config_key_get".} 21 | proc lookup_aliases*(fontname: cstring, families: PPPchar, n_families: ptr int32){. 22 | cdecl, dynlib: lib, importc: "pango_lookup_aliases".} 23 | proc parse_style*(str: cstring, style: PStyle, warn: gboolean): gboolean{.cdecl, 24 | dynlib: lib, importc: "pango_parse_style".} 25 | proc parse_variant*(str: cstring, variant: PVariant, warn: gboolean): gboolean{. 26 | cdecl, dynlib: lib, importc: "pango_parse_variant".} 27 | proc parse_weight*(str: cstring, weight: PWeight, warn: gboolean): gboolean{. 28 | cdecl, dynlib: lib, importc: "pango_parse_weight".} 29 | proc parse_stretch*(str: cstring, stretch: PStretch, warn: gboolean): gboolean{. 30 | cdecl, dynlib: lib, importc: "pango_parse_stretch".} 31 | proc get_sysconf_subdirectory*(): cstring{.cdecl, dynlib: lib, 32 | importc: "pango_get_sysconf_subdirectory".} 33 | proc get_lib_subdirectory*(): cstring{.cdecl, dynlib: lib, 34 | importc: "pango_get_lib_subdirectory".} 35 | proc log2vis_get_embedding_levels*(str: Pgunichar, len: int32, 36 | pbase_dir: PDirection, 37 | embedding_level_list: Pguint8): gboolean{. 38 | cdecl, dynlib: lib, importc: "pango_log2vis_get_embedding_levels".} 39 | proc get_mirror_char*(ch: gunichar, mirrored_ch: Pgunichar): gboolean{.cdecl, 40 | dynlib: lib, importc: "pango_get_mirror_char".} 41 | proc get_sample_string*(language: PLanguage): cstring{.cdecl, 42 | dynlib: lib, importc: "pango_language_get_sample_string".} 43 | -------------------------------------------------------------------------------- /tests/nim.cfg: -------------------------------------------------------------------------------- 1 | --path:"../src/" 2 | -------------------------------------------------------------------------------- /tests/tmain.nim: -------------------------------------------------------------------------------- 1 | #[ 2 | adapted from https://github.com/nim-lang/Nim/issues/5685 3 | ]# 4 | 5 | import std/[os,osproc,compilesettings,strformat,sequtils] 6 | 7 | proc genMegatest(files: seq[string]): string = 8 | # xxx this could be moved to some reusable `std/testutils` 9 | # xxx testament.megatest also adds intermediate files for inserting `echo` 10 | # so we can compare outputs in an ordered way; this could be done here too. 11 | proc quoted(a: string): string = result.addQuoted(a) 12 | for file in files: 13 | result.add &"import {file.quoted}\n" 14 | 15 | proc nimCompileWithSameOptions(file: string, options = "", input = "", command = "r") = 16 | let cmd = fmt"{getCurrentCompilerExe()} {command} -b:{querySetting(backend)} {options} {file}" 17 | var (output, status) = execCmdEx(cmd, input = input) 18 | doAssert status == 0, &"cmd: {cmd}\ninput: {input}\noutput: {output}\nstatus: {status}" 19 | 20 | proc main = 21 | let code = filterIt(toSeq(walkFiles("examples/*.nim")), it.lastPathPart != "gtk_quartz_ex1.nim").genMegatest 22 | # running fails on osx: could not load: (libgtkmacintegration.2.dylib|libgtkmacintegration-gtk2.2.dylib) 23 | nimCompileWithSameOptions("-", options = "-d:gtk2DisableMain", input = code) 24 | nimCompileWithSameOptions("examples/gtk_quartz_ex1.nim", options = "--usenimcache -d:gtk2DisableMain", command = "c") 25 | # TODO: use -r:off instead, pending https://github.com/timotheecour/Nim/issues/639 26 | main() 27 | --------------------------------------------------------------------------------