mirror of https://github.com/adamdruppe/arsd.git
slightly prettier popup window
This commit is contained in:
parent
13f55bf8d5
commit
234e014b3b
|
@ -2378,10 +2378,22 @@ class NotificationAreaIcon : CapableOfHandlingNativeEvent {
|
||||||
}
|
}
|
||||||
|
|
||||||
/++
|
/++
|
||||||
Shows a balloon notification.
|
Shows a balloon notification. You can only show one balloon at a time, if you call
|
||||||
|
it twice while one is already up, the first balloon will be replaced.
|
||||||
|
|
||||||
|
|
||||||
|
The user is free to block notifications and they will automatically disappear after
|
||||||
|
a timeout period.
|
||||||
|
|
||||||
|
Params:
|
||||||
|
title = Title of the notification. Must be 40 chars or less.
|
||||||
|
message = The message to pop up. Must be 220 chars or less.
|
||||||
|
icon = the icon to display with the notification. If null, it uses your existing icon.
|
||||||
|
onclick = delegate called if the user clicks the balloon. (not yet implemented)
|
||||||
+/
|
+/
|
||||||
void showBalloon(string title, string message, MemoryImage icon = null) {
|
void showBalloon(string title, string message, MemoryImage icon = null, void delegate() onclick = null) {
|
||||||
version(X11) {
|
version(X11) {
|
||||||
|
if(!active) return;
|
||||||
if(balloon) {
|
if(balloon) {
|
||||||
hideBalloon();
|
hideBalloon();
|
||||||
}
|
}
|
||||||
|
@ -2389,7 +2401,7 @@ class NotificationAreaIcon : CapableOfHandlingNativeEvent {
|
||||||
// implemented by any window manager I have ever seen, and
|
// implemented by any window manager I have ever seen, and
|
||||||
// the other is a bloated mess and too complicated for simpledisplay...
|
// the other is a bloated mess and too complicated for simpledisplay...
|
||||||
// so doing my own little window instead.
|
// so doing my own little window instead.
|
||||||
balloon = new SimpleWindow(180, 120, null, OpenGlOptions.no, Resizability.fixedSize, WindowTypes.notification, WindowFlags.dontAutoShow/*, window*/);
|
balloon = new SimpleWindow(380, 120, null, OpenGlOptions.no, Resizability.fixedSize, WindowTypes.notification, WindowFlags.dontAutoShow/*, window*/);
|
||||||
|
|
||||||
int x, y, width, height;
|
int x, y, width, height;
|
||||||
getWindowRect(x, y, width, height);
|
getWindowRect(x, y, width, height);
|
||||||
|
@ -2399,12 +2411,34 @@ class NotificationAreaIcon : CapableOfHandlingNativeEvent {
|
||||||
painter.fillColor = Color(220, 220, 220);
|
painter.fillColor = Color(220, 220, 220);
|
||||||
painter.outlineColor = Color.black;
|
painter.outlineColor = Color.black;
|
||||||
painter.drawRectangle(Point(0, 0), balloon.width, balloon.height);
|
painter.drawRectangle(Point(0, 0), balloon.width, balloon.height);
|
||||||
painter.drawText(Point(4, 4), title);
|
auto iconWidth = icon is null ? 0 : icon.width;
|
||||||
painter.drawText(Point(4, 4 + painter.fontHeight * 2), message);
|
if(icon)
|
||||||
|
painter.drawImage(Point(4, 4), Image.fromMemoryImage(icon));
|
||||||
|
iconWidth += 6; // margin around the icon
|
||||||
|
|
||||||
|
// draw a close button
|
||||||
|
painter.outlineColor = Color(44, 44, 44);
|
||||||
|
painter.fillColor = Color(255, 255, 255);
|
||||||
|
painter.drawRectangle(Point(balloon.width - 15, 3), 13, 13);
|
||||||
|
painter.pen = Pen(Color.black, 3);
|
||||||
|
painter.drawLine(Point(balloon.width - 14, 4), Point(balloon.width - 4, 14));
|
||||||
|
painter.drawLine(Point(balloon.width - 4, 4), Point(balloon.width - 14, 13));
|
||||||
|
painter.pen = Pen(Color.black, 1);
|
||||||
|
painter.fillColor = Color(220, 220, 220);
|
||||||
|
|
||||||
|
// Draw the title and message
|
||||||
|
painter.drawText(Point(4 + iconWidth, 4), title);
|
||||||
|
painter.drawLine(
|
||||||
|
Point(4 + iconWidth, 4 + painter.fontHeight + 1),
|
||||||
|
Point(balloon.width - 4, 4 + painter.fontHeight + 1),
|
||||||
|
);
|
||||||
|
painter.drawText(Point(4 + iconWidth, 4 + painter.fontHeight + 4), message);
|
||||||
|
|
||||||
balloon.setEventHandlers(
|
balloon.setEventHandlers(
|
||||||
(MouseEvent ev) {
|
(MouseEvent ev) {
|
||||||
if(ev.type == MouseEventType.buttonPressed) {
|
if(ev.type == MouseEventType.buttonPressed) {
|
||||||
hideBalloon();
|
if(ev.x > balloon.width - 16 && ev.y < 16)
|
||||||
|
hideBalloon();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in New Issue