1 /* 2 * This file is part of gtkD. 3 * 4 * gtkD is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU Lesser General Public License 6 * as published by the Free Software Foundation; either version 3 7 * of the License, or (at your option) any later version, with 8 * some exceptions, please read the COPYING file. 9 * 10 * gtkD is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public License 16 * along with gtkD; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA 18 */ 19 20 // generated automatically - do not change 21 // find conversion definition on APILookup.txt 22 // implement new conversion functionalities on the wrap.utils pakage 23 24 25 module gdk.DrawContext; 26 27 private import cairo.Region; 28 private import gdk.Display; 29 private import gdk.Surface; 30 private import gdk.c.functions; 31 public import gdk.c.types; 32 private import gobject.ObjectG; 33 34 35 /** 36 * Base class for objects implementing different rendering methods. 37 * 38 * `GdkDrawContext` is the base object used by contexts implementing different 39 * rendering methods, such as [class@Gdk.CairoContext] or [class@Gdk.GLContext]. 40 * It provides shared functionality between those contexts. 41 * 42 * You will always interact with one of those subclasses. 43 * 44 * A `GdkDrawContext` is always associated with a single toplevel surface. 45 */ 46 public class DrawContext : ObjectG 47 { 48 /** the main Gtk struct */ 49 protected GdkDrawContext* gdkDrawContext; 50 51 /** Get the main Gtk struct */ 52 public GdkDrawContext* getDrawContextStruct(bool transferOwnership = false) 53 { 54 if (transferOwnership) 55 ownedRef = false; 56 return gdkDrawContext; 57 } 58 59 /** the main Gtk struct as a void* */ 60 protected override void* getStruct() 61 { 62 return cast(void*)gdkDrawContext; 63 } 64 65 /** 66 * Sets our main struct and passes it to the parent class. 67 */ 68 public this (GdkDrawContext* gdkDrawContext, bool ownedRef = false) 69 { 70 this.gdkDrawContext = gdkDrawContext; 71 super(cast(GObject*)gdkDrawContext, ownedRef); 72 } 73 74 75 /** */ 76 public static GType getType() 77 { 78 return gdk_draw_context_get_type(); 79 } 80 81 /** 82 * Indicates that you are beginning the process of redrawing @region 83 * on the @context's surface. 84 * 85 * Calling this function begins a drawing operation using @context on the 86 * surface that @context was created from. The actual requirements and 87 * guarantees for the drawing operation vary for different implementations 88 * of drawing, so a [class@Gdk.CairoContext] and a [class@Gdk.GLContext] 89 * need to be treated differently. 90 * 91 * A call to this function is a requirement for drawing and must be 92 * followed by a call to [method@Gdk.DrawContext.end_frame], which will 93 * complete the drawing operation and ensure the contents become visible 94 * on screen. 95 * 96 * Note that the @region passed to this function is the minimum region that 97 * needs to be drawn and depending on implementation, windowing system and 98 * hardware in use, it might be necessary to draw a larger region. Drawing 99 * implementation must use [method@Gdk.DrawContext.get_frame_region() to 100 * query the region that must be drawn. 101 * 102 * When using GTK, the widget system automatically places calls to 103 * gdk_draw_context_begin_frame() and gdk_draw_context_end_frame() via the 104 * use of [class@Gsk.Renderer]s, so application code does not need to call 105 * these functions explicitly. 106 * 107 * Params: 108 * region = minimum region that should be drawn 109 */ 110 public void beginFrame(Region region) 111 { 112 gdk_draw_context_begin_frame(gdkDrawContext, (region is null) ? null : region.getRegionStruct()); 113 } 114 115 /** 116 * Ends a drawing operation started with gdk_draw_context_begin_frame(). 117 * 118 * This makes the drawing available on screen. 119 * See [method@Gdk.DrawContext.begin_frame] for more details about drawing. 120 * 121 * When using a [class@Gdk.GLContext], this function may call `glFlush()` 122 * implicitly before returning; it is not recommended to call `glFlush()` 123 * explicitly before calling this function. 124 */ 125 public void endFrame() 126 { 127 gdk_draw_context_end_frame(gdkDrawContext); 128 } 129 130 /** 131 * Retrieves the `GdkDisplay` the @context is created for 132 * 133 * Returns: a `GdkDisplay` or %NULL 134 */ 135 public Display getDisplay() 136 { 137 auto __p = gdk_draw_context_get_display(gdkDrawContext); 138 139 if(__p is null) 140 { 141 return null; 142 } 143 144 return ObjectG.getDObject!(Display)(cast(GdkDisplay*) __p); 145 } 146 147 /** 148 * Retrieves the region that is currently being repainted. 149 * 150 * After a call to [method@Gdk.DrawContext.begin_frame] this function will 151 * return a union of the region passed to that function and the area of the 152 * surface that the @context determined needs to be repainted. 153 * 154 * If @context is not in between calls to [method@Gdk.DrawContext.begin_frame] 155 * and [method@Gdk.DrawContext.end_frame], %NULL will be returned. 156 * 157 * Returns: a Cairo region or %NULL if not drawing 158 * a frame. 159 */ 160 public Region getFrameRegion() 161 { 162 auto __p = gdk_draw_context_get_frame_region(gdkDrawContext); 163 164 if(__p is null) 165 { 166 return null; 167 } 168 169 return new Region(cast(cairo_region_t*) __p); 170 } 171 172 /** 173 * Retrieves the surface that @context is bound to. 174 * 175 * Returns: a #GdkSurface or %NULL 176 */ 177 public Surface getSurface() 178 { 179 auto __p = gdk_draw_context_get_surface(gdkDrawContext); 180 181 if(__p is null) 182 { 183 return null; 184 } 185 186 return ObjectG.getDObject!(Surface)(cast(GdkSurface*) __p); 187 } 188 189 /** 190 * Returns %TRUE if @context is in the process of drawing to its surface. 191 * 192 * This is the case between calls to [method@Gdk.DrawContext.begin_frame] 193 * and [method@Gdk.DrawContext.end_frame]. In this situation, drawing commands 194 * may be effecting the contents of the @context's surface. 195 * 196 * Returns: %TRUE if the context is between [method@Gdk.DrawContext.begin_frame] 197 * and [method@Gdk.DrawContext.end_frame] calls. 198 */ 199 public bool isInFrame() 200 { 201 return gdk_draw_context_is_in_frame(gdkDrawContext) != 0; 202 } 203 }