Description

Provides window and OpenGL context creation cross platform.

Package Information

Version0.1.3 (2015-Jun-20)
Homepagehttps://github.com/Devisualization/window
Repositoryhttps://github.com/devisualization/window
LicenseMIT
CopyrightCopyright © 2014, Richard Andrew Cattermole, Devisualization
AuthorsRichard Andrew Cattermole
Registered byRichard Andrew Cattermole
Sub packages
de_window:interfaces
de_window:platform
de_window:test
Dependenciesnone

Installation

To use this package, put the following dependency into your project's dependencies section:

dub.json
dub.sdl

Readme

Devisualization Window Toolkit

Window creational toolkit, cross platform. Written in D.
Depends on Derelict-GL3 for Opengl support.
Gitter Build Status

There is currently issues for running within Cygwin on Windows. The window may seem choppy and will not auto flush standard output. There is no clear cut fix for this at the present time as it is on Cygwin's side.

Features

  • Create, Destroy, On draw
  • Move, Resize
  • Key down/up with modifiers
  • Mouse left/right/middle down/up
  • Window Icon, Text
  • OpenGL (both legacy and 3+) context creation (Windows, X11, OSX (Cocoa))
  • Direct3d context creation on windows (untested)
  • 2D image buffer drawing context

Example

Custom event loop

import devisualization.window.window;
import std.stdio;

void main() {
	Window window = new Window(800, 600, "My window!"w);
	window.show();

	window.addOnDraw((Windowable window2) {
		writeln("drawing");
  });

  while(true) {
    import core.thread : Thread;
    import core.time : dur;
    Window.messageLoopIteration();

    if (window.hasBeenClosed)
        break;
    else
        window.onDraw();
    //Thread.sleep(dur!"msecs"(25));
  }
}

Thread sleep is optional, as messageLoopIteration is blocking but may not wait for a message.
However it should be one draw per x time units. For most efficient loop. During the drawing, check if you have a valid context. OnDraw may occur while there is no valid context.

Using as a dub package

To add de_window as a dependency to your project use:

"dependencies": {
    "de_window:platform": "~>0.1.2",
}

Of course instead of "~>0.1.2" can/should be your version number.

TODO

  • Confirm prevent close works on Windows and X11
  • Direct3d abstraction within interfaces?
  • On window redisplay(undo of minimise)/maximise/minimise
  • Add messageLoopIteration respective function for wait till message (win/lin/osx)

X11 based window manager weird behaviours:

  • Make sure icons work on Posix
  • Make sure full screen works correctly on Posix (tempermental on XFCE)

Available versions

0.1.3 0.1.2 0.1.1 0.1.0 0.0.10 0.0.9 0.0.8 0.0.7 0.0.6 0.0.5 0.0.4 0.0.3 0.0.2 0.0.1 ~master