min/max size from ketmar

This commit is contained in:
Adam D. Ruppe 2016-07-31 16:18:52 -04:00
parent 6826453793
commit 2e68805b68
1 changed files with 60 additions and 2 deletions

View File

@ -886,6 +886,24 @@ class SimpleWindow : CapableOfHandlingNativeEvent {
if (!_closed) impl.showCursor();
}
/// Set window minimal size.
/// TODO: winapi implementation
void setMinSize (int minwidth, int minheight) {
if (!_closed) impl.setMinSize(minwidth, minheight);
}
/// Set window maximal size.
/// TODO: winapi implementation
void setMaxSize (int maxwidth, int maxheight) {
if (!_closed) impl.setMaxSize(maxwidth, maxheight);
}
/// Set window resize step (window size will be changed with the given granularity).
/// TODO: winapi implementation
void setResizeGranularity (int granx, int grany) {
if (!_closed) impl.setResizeGranularity(granx, grany);
}
/// Move window.
void move (int x, int y) { if (!_closed) impl.move(x, y); }
@ -3630,6 +3648,11 @@ version(Windows) {
--curHidden;
}
//TODO: implement these, probably by processing WM_SIZE message or something.
void setMinSize (int minwidth, int minheight) {}
void setMaxSize (int maxwidth, int maxheight) {}
void setResizeGranularity (int granx, int grany) {}
ScreenPainter getPainter() {
return ScreenPainter(this, hwnd);
}
@ -4892,6 +4915,40 @@ version(X11) {
namebuf[0..maxlen] = title[0..maxlen];
XStoreName(display, window, namebuf.ptr);
XChangeProperty(display, window, XA_NETWM_NAME, XA_UTF8, 8, PropModeReplace, title.ptr, cast(uint)title.length);
flushGui(); // without this OpenGL windows has a LONG delay before changing title
}
void setMinSize (int minwidth, int minheight) {
if (minwidth < 1) minwidth = 1;
if (minheight < 1) minheight = 1;
XSizeHints sh;
sh.min_width = minwidth;
sh.min_height = minheight;
sh.flags = PMinSize;
XSetWMNormalHints(display, window, &sh);
flushGui();
}
void setMaxSize (int maxwidth, int maxheight) {
if (maxwidth < 1) maxwidth = 1;
if (maxheight < 1) maxheight = 1;
XSizeHints sh;
sh.max_width = maxwidth;
sh.max_height = maxheight;
sh.flags = PMaxSize;
XSetWMNormalHints(display, window, &sh);
flushGui();
}
void setResizeGranularity (int granx, int grany) {
if (granx < 1) granx = 1;
if (grany < 1) grany = 1;
XSizeHints sh;
sh.width_inc = granx;
sh.height_inc = grany;
sh.flags = PResizeInc;
XSetWMNormalHints(display, window, &sh);
flushGui();
}
void createWindow(int width, int height, string title, in OpenGlOptions opengl, SimpleWindow parent) {
@ -5084,8 +5141,9 @@ version(X11) {
}
if(this.resizability != Resizablity.allowResizing && opengl == OpenGlOptions.no) {
if (this.resizability == Resizablity.fixedSize ||
(opengl == OpenGlOptions.no && this.resizability != Resizablity.fixedSize))
{
XSizeHints sh;
sh.min_width = width;
sh.min_height = height;