mirror of https://github.com/adamdruppe/arsd.git
widgetpainter begins
This commit is contained in:
parent
11f9602ced
commit
b82dd94195
2
dom.d
2
dom.d
|
@ -1,5 +1,5 @@
|
|||
// FIXME: add classList
|
||||
// FIXME: add matchesSelector
|
||||
// FIXME: add matchesSelector - standard name is `matches`. also `closest` walks up to find the parent that matches
|
||||
// FIXME: https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML
|
||||
// FIXME: appendChild should not fail if the thing already has a parent; it should just automatically remove it per standard.
|
||||
|
||||
|
|
94
minigui.d
94
minigui.d
|
@ -366,7 +366,7 @@ class DropDownSelection : ComboboxBase {
|
|||
}
|
||||
|
||||
version(custom_widgets)
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
draw3dFrame(this, painter, FrameStyle.risen);
|
||||
painter.outlineColor = Color.black;
|
||||
painter.drawText(Point(4, 4), selection == -1 ? "" : options[selection]);
|
||||
|
@ -1108,6 +1108,21 @@ extern(Windows) BOOL childHandler(HWND hwnd, LPARAM lparam) {
|
|||
return true;
|
||||
}
|
||||
|
||||
/++
|
||||
|
||||
+/
|
||||
struct WidgetPainter {
|
||||
///
|
||||
ScreenPainter screenPainter;
|
||||
/// Forward to the screen painter for other methods
|
||||
alias screenPainter this;
|
||||
|
||||
/++
|
||||
This is the list of rectangles that actually need to be redrawn.
|
||||
+/
|
||||
Rectangle[] invalidatedRectangles;
|
||||
}
|
||||
|
||||
/**
|
||||
The way this module works is it builds on top of a SimpleWindow
|
||||
from simpledisplay to provide simple controls and such.
|
||||
|
@ -1126,6 +1141,9 @@ extern(Windows) BOOL childHandler(HWND hwnd, LPARAM lparam) {
|
|||
class Widget {
|
||||
mixin LayoutInfo!();
|
||||
|
||||
deprecated("Change ScreenPainter to WidgetPainter")
|
||||
final void paint(ScreenPainter) { assert(0, "Change ScreenPainter to WidgetPainter and recompile your code"); }
|
||||
|
||||
///
|
||||
@scriptable
|
||||
void removeWidget() {
|
||||
|
@ -1518,11 +1536,11 @@ class Widget {
|
|||
}
|
||||
|
||||
///
|
||||
void paint(ScreenPainter painter) {}
|
||||
void paint(WidgetPainter painter) {}
|
||||
|
||||
/// I don't actually like the name of this
|
||||
/// this draws a background on it
|
||||
void erase(ScreenPainter painter) {
|
||||
void erase(WidgetPainter painter) {
|
||||
version(win32_widgets)
|
||||
if(hwnd) return; // Windows will do it. I think.
|
||||
|
||||
|
@ -1565,7 +1583,7 @@ class Widget {
|
|||
}
|
||||
|
||||
///
|
||||
ScreenPainter draw() {
|
||||
WidgetPainter draw() {
|
||||
int x = this.x, y = this.y;
|
||||
auto parent = this.parent;
|
||||
while(parent) {
|
||||
|
@ -1578,10 +1596,10 @@ class Widget {
|
|||
painter.originX = x;
|
||||
painter.originY = y;
|
||||
painter.setClipRectangle(Point(0, 0), width, height);
|
||||
return painter;
|
||||
return WidgetPainter(painter);
|
||||
}
|
||||
|
||||
protected void privatePaint(ScreenPainter painter, int lox, int loy, bool force = false) {
|
||||
protected void privatePaint(WidgetPainter painter, int lox, int loy, bool force = false) {
|
||||
if(hidden)
|
||||
return;
|
||||
|
||||
|
@ -1609,7 +1627,7 @@ class Widget {
|
|||
version(win32_widgets)
|
||||
foreach(child; children) {
|
||||
if(child.hwnd){
|
||||
painter = child.simpleWindowWrappingHwnd.draw;
|
||||
painter = WidgetPainter(child.simpleWindowWrappingHwnd.draw);
|
||||
child.privatePaint(painter, painter.originX, painter.originY, actuallyPainted);
|
||||
}
|
||||
}
|
||||
|
@ -1653,7 +1671,7 @@ class Widget {
|
|||
ugh = ugh.parent;
|
||||
}
|
||||
auto painter = w.draw();
|
||||
privatePaint(painter, lox, loy);
|
||||
privatePaint(WidgetPainter(painter), lox, loy);
|
||||
}
|
||||
|
||||
SimpleWindow drawableWindow;
|
||||
|
@ -1703,7 +1721,7 @@ class OpenGlWidget : Widget {
|
|||
}
|
||||
}
|
||||
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
win.redrawOpenGlSceneNow();
|
||||
}
|
||||
|
||||
|
@ -1776,11 +1794,11 @@ class ListWidget : ScrollableWidget {
|
|||
super(parent);
|
||||
}
|
||||
|
||||
override void paintFrameAndBackground(ScreenPainter painter) {
|
||||
override void paintFrameAndBackground(WidgetPainter painter) {
|
||||
draw3dFrame(this, painter, FrameStyle.sunk, Color.white);
|
||||
}
|
||||
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
auto pos = Point(4, 4);
|
||||
foreach(idx, option; options) {
|
||||
painter.fillColor = Color.white;
|
||||
|
@ -2157,7 +2175,7 @@ class ScrollableWidget : Widget {
|
|||
/// This is called before the ordinary paint delegate,
|
||||
/// giving you a chance to draw the window frame, etc,
|
||||
/// before the scroll clip takes effect
|
||||
void paintFrameAndBackground(ScreenPainter painter) {
|
||||
void paintFrameAndBackground(WidgetPainter painter) {
|
||||
version(win32_widgets) {
|
||||
auto b = SelectObject(painter.impl.hdc, GetSysColorBrush(COLOR_3DFACE));
|
||||
auto p = SelectObject(painter.impl.hdc, GetStockObject(NULL_PEN));
|
||||
|
@ -2177,7 +2195,7 @@ class ScrollableWidget : Widget {
|
|||
END SCROLLING
|
||||
*/
|
||||
|
||||
override ScreenPainter draw() {
|
||||
override WidgetPainter draw() {
|
||||
int x = this.x, y = this.y;
|
||||
auto parent = this.parent;
|
||||
while(parent) {
|
||||
|
@ -2198,10 +2216,10 @@ class ScrollableWidget : Widget {
|
|||
painter.originY = painter.originY - scrollOrigin.y;
|
||||
painter.setClipRectangle(scrollOrigin, viewportWidth(), viewportHeight());
|
||||
|
||||
return painter;
|
||||
return WidgetPainter(painter);
|
||||
}
|
||||
|
||||
override protected void privatePaint(ScreenPainter painter, int lox, int loy, bool force = false) {
|
||||
override protected void privatePaint(WidgetPainter painter, int lox, int loy, bool force = false) {
|
||||
if(hidden)
|
||||
return;
|
||||
|
||||
|
@ -2346,7 +2364,7 @@ class ScrollableClientWidget : Widget {
|
|||
this(Widget parent) {
|
||||
super(parent);
|
||||
}
|
||||
override void paint(ScreenPainter p) {
|
||||
override void paint(WidgetPainter p) {
|
||||
parent.paint(p);
|
||||
}
|
||||
}
|
||||
|
@ -2563,7 +2581,7 @@ class MouseTrackingWidget : Widget {
|
|||
}
|
||||
|
||||
version(custom_widgets)
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
auto c = darken(windowBackgroundColor, 0.2);
|
||||
painter.outlineColor = c;
|
||||
painter.fillColor = c;
|
||||
|
@ -2988,7 +3006,7 @@ class TabWidget : Widget {
|
|||
}
|
||||
|
||||
version(custom_widgets)
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
|
||||
draw3dFrame(0, tabBarHeight - 2, width, height - tabBarHeight + 2, painter, FrameStyle.risen);
|
||||
|
||||
|
@ -3456,7 +3474,7 @@ class Window : Widget {
|
|||
}
|
||||
|
||||
version(win32_widgets)
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
/*
|
||||
RECT rect;
|
||||
rect.right = this.width;
|
||||
|
@ -3472,7 +3490,7 @@ class Window : Widget {
|
|||
SelectObject(painter.impl.hdc, b);
|
||||
}
|
||||
version(custom_widgets)
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
painter.fillColor = windowBackgroundColor;
|
||||
painter.outlineColor = windowBackgroundColor;
|
||||
painter.drawRectangle(Point(0, 0), this.width, this.height);
|
||||
|
@ -4233,7 +4251,7 @@ class ToolButton : Button {
|
|||
override int minHeight() { return toolbarIconSize; }
|
||||
|
||||
version(custom_widgets)
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
this.draw3dFrame(painter, isDepressed ? FrameStyle.sunk : FrameStyle.risen, currentButtonColor);
|
||||
|
||||
painter.outlineColor = Color.black;
|
||||
|
@ -4360,7 +4378,7 @@ class MenuBar : Widget {
|
|||
} else static assert(false);
|
||||
|
||||
version(custom_widgets)
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
draw3dFrame(this, painter, FrameStyle.risen);
|
||||
}
|
||||
|
||||
|
@ -4515,7 +4533,7 @@ class StatusBar : Widget {
|
|||
}
|
||||
|
||||
version(custom_widgets)
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
this.draw3dFrame(painter, FrameStyle.sunk);
|
||||
int cpos = 0;
|
||||
int remainingLength = this.width;
|
||||
|
@ -4569,7 +4587,7 @@ class ProgressBar : Widget {
|
|||
}
|
||||
|
||||
version(custom_widgets)
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
this.draw3dFrame(painter, FrameStyle.sunk);
|
||||
painter.fillColor = progressBarColor;
|
||||
painter.drawRectangle(Point(0, 0), width * current / max, height);
|
||||
|
@ -4670,7 +4688,7 @@ class Fieldset : Widget {
|
|||
}
|
||||
|
||||
version(custom_widgets)
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
painter.fillColor = Color.transparent;
|
||||
painter.pen = Pen(Color.black, 1);
|
||||
painter.drawRectangle(Point(0, Window.lineHeight / 2), width, height - Window.lineHeight / 2);
|
||||
|
@ -4723,7 +4741,7 @@ class HorizontalRule : Widget {
|
|||
super(parent);
|
||||
}
|
||||
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
painter.outlineColor = darkAccentColor;
|
||||
painter.drawLine(Point(0, 0), Point(width, 0));
|
||||
painter.outlineColor = lightAccentColor;
|
||||
|
@ -4742,7 +4760,7 @@ class VerticalRule : Widget {
|
|||
super(parent);
|
||||
}
|
||||
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
painter.outlineColor = darkAccentColor;
|
||||
painter.drawLine(Point(0, 0), Point(0, height));
|
||||
painter.outlineColor = lightAccentColor;
|
||||
|
@ -4894,7 +4912,7 @@ class Menu : Window {
|
|||
override int minHeight() { return Window.lineHeight; }
|
||||
|
||||
version(custom_widgets)
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
this.draw3dFrame(painter, FrameStyle.risen);
|
||||
}
|
||||
}
|
||||
|
@ -4927,7 +4945,7 @@ class MenuItem : MouseActivatedWidget {
|
|||
}
|
||||
|
||||
version(custom_widgets)
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
if(isDepressed)
|
||||
this.draw3dFrame(painter, FrameStyle.sunk);
|
||||
if(isHovering)
|
||||
|
@ -5094,7 +5112,7 @@ class Checkbox : MouseActivatedWidget {
|
|||
}
|
||||
|
||||
version(custom_widgets)
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
if(isFocused()) {
|
||||
painter.pen = Pen(Color.black, 1, Pen.Style.Dotted);
|
||||
painter.fillColor = windowBackgroundColor;
|
||||
|
@ -5186,7 +5204,7 @@ class Radiobox : MouseActivatedWidget {
|
|||
else static assert(false);
|
||||
|
||||
version(custom_widgets)
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
if(isFocused) {
|
||||
painter.fillColor = windowBackgroundColor;
|
||||
painter.pen = Pen(Color.black, 1, Pen.Style.Dotted);
|
||||
|
@ -5303,7 +5321,7 @@ class Button : MouseActivatedWidget {
|
|||
override int minHeight() { return Window.lineHeight + 4; }
|
||||
|
||||
version(custom_widgets)
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
this.draw3dFrame(painter, isDepressed ? FrameStyle.sunk : FrameStyle.risen, currentButtonColor);
|
||||
|
||||
|
||||
|
@ -5367,7 +5385,7 @@ class ArrowButton : Button {
|
|||
override int minWidth() { return 16; }
|
||||
override int maxWidth() { return 16; }
|
||||
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
super.paint(painter);
|
||||
|
||||
painter.outlineColor = Color.black;
|
||||
|
@ -5478,7 +5496,7 @@ class ImageBox : Widget {
|
|||
sprite = new Sprite(this.parentWindow.win, Image.fromMemoryImage(image_));
|
||||
}
|
||||
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
updateSprite();
|
||||
if(backgroundColor_.a) {
|
||||
painter.fillColor = backgroundColor_;
|
||||
|
@ -5529,7 +5547,7 @@ class TextLabel : Widget {
|
|||
|
||||
TextAlignment alignment;
|
||||
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
painter.outlineColor = Color.black;
|
||||
painter.drawText(Point(0, 0), this.label, Point(width,height), alignment);
|
||||
}
|
||||
|
@ -5649,7 +5667,7 @@ abstract class EditableTextWidget : EditableTextWidgetParent {
|
|||
}
|
||||
|
||||
version(custom_widgets)
|
||||
override void paintFrameAndBackground(ScreenPainter painter) {
|
||||
override void paintFrameAndBackground(WidgetPainter painter) {
|
||||
this.draw3dFrame(painter, FrameStyle.sunk, Color.white);
|
||||
}
|
||||
|
||||
|
@ -5664,7 +5682,7 @@ abstract class EditableTextWidget : EditableTextWidgetParent {
|
|||
textLayout = new TextLayout(Rectangle(4, 2, width - 8, height - 4));
|
||||
}
|
||||
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
if(parentWindow.win.closed) return;
|
||||
|
||||
textLayout.boundingBox = Rectangle(4, 2, width - 8, height - 4);
|
||||
|
@ -5937,7 +5955,7 @@ class MessageBox : Window {
|
|||
redraw();
|
||||
}
|
||||
|
||||
override void paint(ScreenPainter painter) {
|
||||
override void paint(WidgetPainter painter) {
|
||||
super.paint(painter);
|
||||
painter.outlineColor = Color.black;
|
||||
painter.drawText(Point(0, 0), message, Point(width, height / 2), TextAlignment.Center | TextAlignment.VerticalCenter);
|
||||
|
|
Loading…
Reference in New Issue