mirror of https://github.com/adamdruppe/arsd.git
Merge branch 'master' of github.com:adamdruppe/arsd
This commit is contained in:
commit
c1116d366f
225
minigui.d
225
minigui.d
|
@ -1680,6 +1680,7 @@ class ListWidget : ScrollableWidget {
|
|||
}
|
||||
|
||||
this(Widget parent = null) {
|
||||
tabStop = false;
|
||||
super(parent);
|
||||
}
|
||||
|
||||
|
@ -1829,37 +1830,16 @@ class ScrollableWidget : Widget {
|
|||
|
||||
createWin32Window(this, "arsd_minigui_ScrollableWidget"w, "",
|
||||
0|WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL, 0);
|
||||
super(parent);
|
||||
} else version(custom_widgets) {
|
||||
horizontalScrollbarHolder = new FixedPosition(this);
|
||||
verticalScrollbarHolder = new FixedPosition(this);
|
||||
horizontalScrollBar = new HorizontalScrollbar(horizontalScrollbarHolder);
|
||||
verticalScrollBar = new VerticalScrollbar(verticalScrollbarHolder);
|
||||
|
||||
// TOTAL HACKS
|
||||
horizontalScrollBar.addEventListener("mousedown", (Event event) { event.preventDefault(); });
|
||||
verticalScrollBar.addEventListener("mousedown", (Event event) { event.preventDefault(); });
|
||||
horizontalScrollBar.addEventListener("mousemove", (Event event) { event.preventDefault(); });
|
||||
verticalScrollBar.addEventListener("mousemove", (Event event) { event.preventDefault(); });
|
||||
|
||||
/*
|
||||
clientAreaHolder = new FixedPosition(this);
|
||||
clientArea = new ScrollableClientWidget(clientAreaHolder);
|
||||
*/
|
||||
|
||||
horizontalScrollbarHolder.showing_ = false;
|
||||
verticalScrollbarHolder.showing_ = false;
|
||||
|
||||
horizontalScrollBar.addEventListener(EventType.change, () {
|
||||
horizontalScrollTo(horizontalScrollBar.position);
|
||||
});
|
||||
verticalScrollBar.addEventListener(EventType.change, () {
|
||||
verticalScrollTo(verticalScrollBar.position);
|
||||
});
|
||||
outerContainer = new ScrollableContainerWidget(this, parent);
|
||||
super(outerContainer);
|
||||
} else static assert(0);
|
||||
|
||||
super(parent);
|
||||
}
|
||||
|
||||
version(custom_widgets)
|
||||
ScrollableContainerWidget outerContainer;
|
||||
|
||||
override void defaultEventHandler_click(Event event) {
|
||||
if(event.button == MouseButton.wheelUp)
|
||||
verticalScroll(-16);
|
||||
|
@ -1899,74 +1879,8 @@ class ScrollableWidget : Widget {
|
|||
super.defaultEventHandler_keydown(event);
|
||||
}
|
||||
|
||||
version(custom_widgets) {
|
||||
FixedPosition horizontalScrollbarHolder;
|
||||
FixedPosition verticalScrollbarHolder;
|
||||
|
||||
VerticalScrollbar verticalScrollBar;
|
||||
HorizontalScrollbar horizontalScrollBar;
|
||||
|
||||
/*
|
||||
FixedPosition clientAreaHolder;
|
||||
Widget clientArea;
|
||||
*/
|
||||
}
|
||||
|
||||
version(custom_widgets)
|
||||
override void recomputeChildLayout() {
|
||||
bool both = showingVerticalScroll && showingHorizontalScroll;
|
||||
if(horizontalScrollbarHolder && verticalScrollbarHolder) {
|
||||
horizontalScrollbarHolder.width = this.width - (both ? verticalScrollBar.minWidth() : 0);
|
||||
horizontalScrollbarHolder.height = horizontalScrollBar.minHeight();
|
||||
horizontalScrollbarHolder.x = 0;
|
||||
horizontalScrollbarHolder.y = this.height - horizontalScrollBar.minHeight();
|
||||
|
||||
verticalScrollbarHolder.width = verticalScrollBar.minWidth();
|
||||
verticalScrollbarHolder.height = this.height - (both ? horizontalScrollBar.minHeight() : 0) - 2 - 2;
|
||||
verticalScrollbarHolder.x = this.width - verticalScrollBar.minWidth();
|
||||
verticalScrollbarHolder.y = 0 + 2;
|
||||
|
||||
/*
|
||||
clientAreaHolder.x = 0;
|
||||
clientAreaHolder.y = 0;
|
||||
clientAreaHolder.width = this.width - verticalScrollBar.width;
|
||||
clientAreaHolder.height = this.height - horizontalScrollBar.height;
|
||||
*/
|
||||
|
||||
if(contentWidth_ <= this.width)
|
||||
scrollOrigin_.x = 0;
|
||||
if(contentHeight_ <= this.height)
|
||||
scrollOrigin_.y = 0;
|
||||
}
|
||||
|
||||
|
||||
super.recomputeChildLayout();
|
||||
|
||||
if(contentWidth_ <= this.width)
|
||||
scrollOrigin_.x = 0;
|
||||
if(contentHeight_ <= this.height)
|
||||
scrollOrigin_.y = 0;
|
||||
|
||||
if(showingHorizontalScroll())
|
||||
horizontalScrollbarHolder.showing = true;
|
||||
else
|
||||
horizontalScrollbarHolder.showing = false;
|
||||
if(showingVerticalScroll())
|
||||
verticalScrollbarHolder.showing = true;
|
||||
else
|
||||
verticalScrollbarHolder.showing = false;
|
||||
|
||||
|
||||
verticalScrollBar.setViewableArea(this.viewportHeight());
|
||||
verticalScrollBar.setMax(contentHeight);
|
||||
verticalScrollBar.setPosition(this.scrollOrigin.y);
|
||||
|
||||
horizontalScrollBar.setViewableArea(this.viewportWidth());
|
||||
horizontalScrollBar.setMax(contentWidth);
|
||||
horizontalScrollBar.setPosition(this.scrollOrigin.x);
|
||||
|
||||
|
||||
} else version(win32_widgets)
|
||||
version(win32_widgets)
|
||||
override void recomputeChildLayout() {
|
||||
super.recomputeChildLayout();
|
||||
SCROLLINFO info;
|
||||
|
@ -1983,7 +1897,7 @@ class ScrollableWidget : Widget {
|
|||
info.nMin = 0;
|
||||
info.nMax = contentWidth_;
|
||||
SetScrollInfo(hwnd, SB_HORZ, &info, true);
|
||||
} else static assert(0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -2040,13 +1954,13 @@ class ScrollableWidget : Widget {
|
|||
|
||||
version(custom_widgets) {
|
||||
if(showingVerticalScroll || showingHorizontalScroll) {
|
||||
recomputeChildLayout();
|
||||
outerContainer.recomputeChildLayout();
|
||||
}
|
||||
|
||||
if(showingVerticalScroll())
|
||||
verticalScrollBar.redraw();
|
||||
outerContainer.verticalScrollBar.redraw();
|
||||
if(showingHorizontalScroll())
|
||||
horizontalScrollBar.redraw();
|
||||
outerContainer.horizontalScrollBar.redraw();
|
||||
} else version(win32_widgets) {
|
||||
recomputeChildLayout();
|
||||
} else static assert(0);
|
||||
|
@ -2073,7 +1987,7 @@ class ScrollableWidget : Widget {
|
|||
info.nPos = scrollOrigin_.y;
|
||||
SetScrollInfo(hwnd, SB_VERT, &info, true);
|
||||
} else version(custom_widgets) {
|
||||
verticalScrollBar.setPosition(scrollOrigin_.y);
|
||||
outerContainer.verticalScrollBar.setPosition(scrollOrigin_.y);
|
||||
} else static assert(0);
|
||||
|
||||
redraw();
|
||||
|
@ -2099,7 +2013,7 @@ class ScrollableWidget : Widget {
|
|||
info.nPos = scrollOrigin_.x;
|
||||
SetScrollInfo(hwnd, SB_HORZ, &info, true);
|
||||
} else version(custom_widgets) {
|
||||
horizontalScrollBar.setPosition(scrollOrigin_.x);
|
||||
outerContainer.horizontalScrollBar.setPosition(scrollOrigin_.x);
|
||||
} else static assert(0);
|
||||
|
||||
redraw();
|
||||
|
@ -2205,7 +2119,7 @@ class ScrollableWidget : Widget {
|
|||
painter.originX = painter.originX - scrollOrigin.x;
|
||||
painter.originY = painter.originY - scrollOrigin.y;
|
||||
if(force || redrawRequested) {
|
||||
painter.setClipRectangle(scrollOrigin + Point(2, 2) /* border */, viewportWidth() - 4 /* border */, viewportHeight() - 4 /* border */);
|
||||
painter.setClipRectangle(scrollOrigin + Point(2, 2) /* border */, width - 4, height - 4);
|
||||
|
||||
//erase(painter); // we paintFrameAndBackground above so no need
|
||||
paint(painter);
|
||||
|
@ -2222,6 +2136,109 @@ class ScrollableWidget : Widget {
|
|||
}
|
||||
}
|
||||
|
||||
version(custom_widgets)
|
||||
private class ScrollableContainerWidget : Widget {
|
||||
|
||||
ScrollableWidget sw;
|
||||
|
||||
VerticalScrollbar verticalScrollBar;
|
||||
HorizontalScrollbar horizontalScrollBar;
|
||||
|
||||
this(ScrollableWidget sw, Widget parent) {
|
||||
this.sw = sw;
|
||||
|
||||
this.tabStop = false;
|
||||
|
||||
horizontalScrollBar = new HorizontalScrollbar(this);
|
||||
verticalScrollBar = new VerticalScrollbar(this);
|
||||
|
||||
horizontalScrollBar.showing_ = false;
|
||||
verticalScrollBar.showing_ = false;
|
||||
|
||||
horizontalScrollBar.addEventListener(EventType.change, () {
|
||||
sw.horizontalScrollTo(horizontalScrollBar.position);
|
||||
});
|
||||
verticalScrollBar.addEventListener(EventType.change, () {
|
||||
sw.verticalScrollTo(verticalScrollBar.position);
|
||||
});
|
||||
|
||||
|
||||
super(parent);
|
||||
}
|
||||
|
||||
// this is supposed to be basically invisible...
|
||||
override int minWidth() { return sw.minWidth; }
|
||||
override int minHeight() { return sw.minHeight; }
|
||||
override int maxWidth() { return sw.maxWidth; }
|
||||
override int maxHeight() { return sw.maxHeight; }
|
||||
override int widthStretchiness() { return sw.widthStretchiness; }
|
||||
override int heightStretchiness() { return sw.heightStretchiness; }
|
||||
override int marginLeft() { return sw.marginLeft; }
|
||||
override int marginRight() { return sw.marginRight; }
|
||||
override int marginTop() { return sw.marginTop; }
|
||||
override int marginBottom() { return sw.marginBottom; }
|
||||
override int paddingLeft() { return sw.paddingLeft; }
|
||||
override int paddingRight() { return sw.paddingRight; }
|
||||
override int paddingTop() { return sw.paddingTop; }
|
||||
override int paddingBottom() { return sw.paddingBottom; }
|
||||
override void focus() { sw.focus(); }
|
||||
|
||||
|
||||
override void recomputeChildLayout() {
|
||||
if(sw is null) return;
|
||||
|
||||
bool both = sw.showingVerticalScroll && sw.showingHorizontalScroll;
|
||||
if(horizontalScrollBar && verticalScrollBar) {
|
||||
horizontalScrollBar.width = this.width - (both ? verticalScrollBar.minWidth() : 0);
|
||||
horizontalScrollBar.height = horizontalScrollBar.minHeight();
|
||||
horizontalScrollBar.x = 0;
|
||||
horizontalScrollBar.y = this.height - horizontalScrollBar.minHeight();
|
||||
|
||||
verticalScrollBar.width = verticalScrollBar.minWidth();
|
||||
verticalScrollBar.height = this.height - (both ? horizontalScrollBar.minHeight() : 0) - 2 - 2;
|
||||
verticalScrollBar.x = this.width - verticalScrollBar.minWidth();
|
||||
verticalScrollBar.y = 0 + 2;
|
||||
|
||||
sw.x = 0;
|
||||
sw.y = 0;
|
||||
sw.width = this.width - (verticalScrollBar.showing ? verticalScrollBar.width : 0);
|
||||
sw.height = this.height - (horizontalScrollBar.showing ? horizontalScrollBar.height : 0);
|
||||
|
||||
if(sw.contentWidth_ <= this.width)
|
||||
sw.scrollOrigin_.x = 0;
|
||||
if(sw.contentHeight_ <= this.height)
|
||||
sw.scrollOrigin_.y = 0;
|
||||
|
||||
horizontalScrollBar.recomputeChildLayout();
|
||||
verticalScrollBar.recomputeChildLayout();
|
||||
sw.recomputeChildLayout();
|
||||
}
|
||||
|
||||
if(sw.contentWidth_ <= this.width)
|
||||
sw.scrollOrigin_.x = 0;
|
||||
if(sw.contentHeight_ <= this.height)
|
||||
sw.scrollOrigin_.y = 0;
|
||||
|
||||
if(sw.showingHorizontalScroll())
|
||||
horizontalScrollBar.showing = true;
|
||||
else
|
||||
horizontalScrollBar.showing = false;
|
||||
if(sw.showingVerticalScroll())
|
||||
verticalScrollBar.showing = true;
|
||||
else
|
||||
verticalScrollBar.showing = false;
|
||||
|
||||
|
||||
verticalScrollBar.setViewableArea(sw.viewportHeight());
|
||||
verticalScrollBar.setMax(sw.contentHeight);
|
||||
verticalScrollBar.setPosition(sw.scrollOrigin.y);
|
||||
|
||||
horizontalScrollBar.setViewableArea(sw.viewportWidth());
|
||||
horizontalScrollBar.setMax(sw.contentWidth);
|
||||
horizontalScrollBar.setPosition(sw.scrollOrigin.x);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
class ScrollableClientWidget : Widget {
|
||||
this(Widget parent) {
|
||||
|
@ -5468,12 +5485,6 @@ abstract class EditableTextWidget : EditableTextWidgetParent {
|
|||
version(custom_widgets)
|
||||
override void paintFrameAndBackground(ScreenPainter painter) {
|
||||
this.draw3dFrame(painter, FrameStyle.sunk, Color.white);
|
||||
if(horizontalScrollbarHolder.showing && verticalScrollbarHolder.showing) {
|
||||
// just paint over the lower-right corner
|
||||
painter.outlineColor = windowBackgroundColor;
|
||||
painter.fillColor = windowBackgroundColor;
|
||||
painter.drawRectangle(Point(width - 16, height - 16), Size(16, 16));
|
||||
}
|
||||
}
|
||||
|
||||
version(win32_widgets) { /* will do it with Windows calls in the classes */ }
|
||||
|
|
|
@ -8508,6 +8508,7 @@ version(X11) {
|
|||
/// the library if you want to try something else. Surround that in `static if(UsingSimpledisplayX11)`
|
||||
/// for cross-platform compatibility.
|
||||
//__gshared string xfontstr = "-*-dejavu sans-medium-r-*-*-12-*-*-*-*-*-*-*";
|
||||
//__gshared string xfontstr = "-*-dejavu sans-medium-r-*-*-12-*-*-*-*-*-*-*";
|
||||
__gshared string xfontstr = "-*-lucida-medium-r-normal-sans-12-*-*-*-*-*-*-*";
|
||||
//__gshared string xfontstr = "-*-fixed-medium-r-*-*-14-*-*-*-*-*-*-*";
|
||||
|
||||
|
@ -11896,6 +11897,21 @@ struct Visual
|
|||
XFontSet XCreateFontSet(Display*, const char*, char***, int*, char**);
|
||||
void XFreeFontSet(Display*, XFontSet);
|
||||
void Xutf8DrawString(Display*, Drawable, XFontSet, GC, int, int, in char*, int);
|
||||
void Xutf8DrawText(Display*, Drawable, GC, int, int, XmbTextItem*, int);
|
||||
struct XmbTextItem {
|
||||
char* chars;
|
||||
int nchars;
|
||||
int delta;
|
||||
XFontSet font_set;
|
||||
}
|
||||
|
||||
void XDrawText(Display*, Drawable, GC, int, int, XTextItem*, int);
|
||||
struct XTextItem {
|
||||
char* chars;
|
||||
int nchars;
|
||||
int delta;
|
||||
Font font;
|
||||
}
|
||||
|
||||
int XSetFunction(Display*, GC, int);
|
||||
enum {
|
||||
|
|
Loading…
Reference in New Issue