D言語からObjective-CとCocoaAPIを使いたい
D言語で Mac の GUI を、extern(Objective-C) を使用して Cocoa API (Window) を表示する Web Site がありました。 Obj-C interop and D without druntime code to copy/paste の New Toys "Objective-C from D" です。 これに、少しずつ追加して利用させていただきました。
Index
- NSApplication, NSApplicationActivationPolicy
- NSApplicationDelegate
- NSURL
- NSWindow, NSBackingStoreType, NSWindowStyleMask
- NSWindowDelegate, NSWindowController
- NSColor
- NSRectFill
- NSBezierPath, lineCap, NSWindingRule, dashLine
- NSViewController
- NSView
- CALayer
- NSResponder
- NSMenu
- NSMenuItem
- NSObject
- NSProcessInfo
- NSString, toNs, toDs, toCs, strCopy
- NSLog
- NSDictionary
- NSAlert, alertButtonReturn, alertStyle, modalResponse
- NSRect, NSMakeRect
- NSPoint, NSMakePoint
- NSSize, NSMakeSize
- NSRange, NSMakeRange
- CGPoint, CGPointMake
- CGSize, CGSizeMake
- CGRect, CGRectMake
サンプルコード
Powered by Prism
cocoa/window.d
/**
* cocoa/window.d Version 0.0.26
* http://dpldocs.info/this-week-in-d/Blog.Posted_2019_02_25.html
*/
module cocoa.window;
import core.attribute : optional, selector;
import std.conv : to;
import cocoa.control;
extern (Objective-C)
__gshared NSApplication NSApp_;
NSApplication NSApp() {
if(NSApp_ is null)
NSApp_ = NSApplication.shared_;
return NSApp_;
}
extern (Objective-C)
extern class NSApplication : NSResponder {
static NSApplication shared_() @selector("sharedApplication");
void* delegate_() @selector("delegate");
void delegate_(void*) @selector("setDelegate:");
bool setActivationPolicy(NSApplicationActivationPolicy
activationPolicy)
@selector("setActivationPolicy:");
bool activationPolicy(NSAppActivationPolicy)
@selector("setActivationPolicy:");
/* use `int` as workaround for
https://github.com/ldc-developers/ldc/issues/2387 */
void activateIgnoringOtherApps(int flag)
@selector("activateIgnoringOtherApps:");
void run() @selector("run");
NSMenu servicesMenu() @selector("servicesMenu"); //
void servicesMenu(NSMenu) @selector("setServicesMenu:"); //
bool openURL(NSURL) @selector("canOpenURL:");
void aboutPanelOptions(NSDictionary)
@selector("orderFrontStandardAboutPanelWithOptions:");
}
extern (Objective-C)
class NSApplicationDelegate : NSObject {
override static NSApplicationDelegate alloc() @selector("alloc");
override NSApplicationDelegate init() @selector("init");
void applicationDidFinishLaunching(NSNotification notification)
@selector("applicationDidFinishLaunching:");
bool applicationShouldTerminateAfterLastWindowClosed(
NSNotification notification)
@selector("applicationShouldTerminateAfterLastWindowClosed:");
}
extern (Objective-C)
extern class NSURL : NSObject {
/* Creating ana NSURL Object */
static NSURL url(NSString) @selector("URLWithString:"); // NSString -> NSURL
static NSURL toNsURL(NSString) @selector("URLWithString:"); // ==
static NSURL url(NSString, NSURL) @selector("URLWithString:relativeToURL:"); // ==
static NSURL urlPath(NSString) @selector("fileURLWithPath:"); // ==
NSURL init(NSString) @selector("initWithString:");
NSURL url(string s) { return NSURL.url(s.toNs); }
/* Accessing the Parts of the URL */
NSString abString() @selector("absoluteString"); // NSURL -> NSString
NSString toNsStr() @selector("absoluteString"); // ==
}
extern (Objective-C)
extern class NSWindow : NSResponder {
override static NSWindow alloc() @selector("alloc");
override NSWindow init() @selector("init");
NSWindow init(
NSRect contentRect,
NSWindowStyleMask style,
NSBackingStoreType bufferingType,
bool flag
) @selector("initWithContentRect:styleMask:backing:defer:");
NSWindow initWithContentRect(
NSRect contentRect,
NSWindowStyleMask style,
NSBackingStoreType bufferingType,
bool flag
) @selector("initWithContentRect:styleMask:backing:defer:");
void makeKeyAndOrderFront(void* sender)
@selector("makeKeyAndOrderFront:");
NSView contentView() @selector("contentView");
NSViewController viewCtrler() @selector("contentViewController"); //
void viewCtrler(NSViewController) @selector("setContentViewController:"); //
void orderFrontRegardless() @selector("orderFrontRegardless");
void center() @selector("center");
void contentView(NSView view) @selector("setContentView:");
void setDelegate(NSView view) @selector("setDelegate:");
void delegate_(NSWindowDelegate) @selector("setDelegate:");
NSWindowController windowController() @selector("windowController"); //
void windowController(NSWindowController) @selector("setWindowController:"); //
void frameOrigin(NSPoint) @selector("setFrameOrigin:");
void origin(NSPoint) @selector("setFrameOrigin:");
void frame(NSRect) @selector("setFrame:");
NSRect frame() @selector("frame");
void backgroundColor(NSColor) @selector("setBackgroundColor:");
void bgColor(NSColor) @selector("setBackgroundColor:");
void cascadeTop(NSPoint) @selector("cascadeTopLeftFromPoint:");
void moveTop(NSPoint) @selector("setFrameTopLeftPoint:");
void moveOrigin(NSPoint) @selector("setFrameOrigin:");
void title(NSString) @selector("setTitle:");
void minSize(NSSize) @selector("setMinSize:");
void maxSize(NSSize) @selector("setMaxSize:"); // 23.12.19
CGFloat backingScaleFactor() @selector("backingScaleFactor");
/* Closing Windows */
void close() @selector("close");
}
extern (Objective-C)
interface NSWindowDelegate {
@optional void winDidEndSheet(NSNotification) @selector("windowDidEndSheet:"); //
@optional void winDidResize(NSNotification) @selector("windowDidResize:");
@optional void winWillClose(NSNotification) @selector("windowWillClose:"); //
}
extern (Objective-C)
extern class NSWindowController : NSResponder { //
override static NSWindowController alloc() @selector("alloc"); //
NSWindowController init(NSWindow) @selector("initWithWindow:");
void windowDidLoad() @selector("windowDidLoad");
NSViewController viewCtrler() @selector("contentViewController"); //
void showWindow(NSWindow) @selector("showWindow:"); //
}
extern (Objective-C)
extern class NSColor : NSObject {
static NSColor black() @selector("blackColor");
static NSColor blue() @selector("blueColor");
static NSColor brown() @selector("brownColor");
static NSColor clear() @selector("clearColor");
static NSColor cyan() @selector("cyanColor");
static NSColor darkGray() @selector("darkGrayColor");
static NSColor gray() @selector("grayColor");
static NSColor green() @selector("greenColor");
static NSColor indigo() @selector("systemIndigoColor");
static NSColor lightGray() @selector("lightGrayColor");
static NSColor magenta() @selector("magentaColor");
static NSColor mint() @selector("systemMintColor");
static NSColor orange() @selector("orangeColor");
static NSColor pink() @selector("systemPinkColor");
static NSColor purple() @selector("purpleColor");
static NSColor red() @selector("redColor");
static NSColor teal() @selector("systemTealColor");
static NSColor white() @selector("whiteColor");
static NSColor yellow() @selector("yellowColor");
static NSColor colorRGB(CGFloat, CGFloat, CGFloat, CGFloat)
@selector("colorWithDeviceRed:green:blue:alpha:");
static NSColor RGB(CGFloat, CGFloat, CGFloat, CGFloat)
@selector("colorWithDeviceRed:green:blue:alpha:");
static NSColor rgba(CGFloat, CGFloat, CGFloat, CGFloat) //
@selector("colorWithDeviceRed:green:blue:alpha:");
static NSColor colorCMYK(CGFloat, CGFloat, CGFloat, CGFloat, CGFloat)
@selector("colorWithDeviceCyan:magenta:yellow:black:alpha:");
static NSColor cmyk(CGFloat, CGFloat, CGFloat, CGFloat, CGFloat)
@selector("colorWithDeviceCyan:magenta:yellow:black:alpha:");
static NSColor colorHSB(CGFloat, CGFloat, CGFloat, CGFloat)
@selector("colorWithDeviceHue:saturation:brightness:alpha:");
NSColor set() @selector("set");
NSColor setFill() @selector("setFill");
NSColor fill() @selector("setFill");
NSColor setStroke() @selector("setStroke");
NSColor stroke() @selector("setStroke");
CGFloat redComponent() @selector("redComponent");
CGFloat greenComponent() @selector("greenComponent");
CGFloat blueComponent() @selector("blueComponent");
CGFloat alphaComponent() @selector("alphaComponent");
void components(CGFloat) @selector("getComponents:");
NSColor spaceName(NSString) @selector("colorUsingColorSpaceName:");
CGColorRef CGColor() @selector("CGColor");
CGColorRef cgColor() @selector("CGColor");
}
extern (C) void NSRectFill(NSRect);
extern (Objective-C)
extern class NSBezierPath : NSObject {
static NSBezierPath bezierPath() @selector("bezierPath");
static NSBezierPath ovalInRect(NSRect) @selector("bezierPathWithOvalInRect:");
static NSBezierPath oval(NSRect) @selector("bezierPathWithOvalInRect:");
static NSBezierPath rect(NSRect) @selector("bezierPathWithRect:");
static NSBezierPath bezierPathWithRoundedRect(NSRect, CGFloat, CGFloat)
@selector("bezierPathWithRoundedRect:xRadius:yRadius:");
static NSBezierPath roundedRect(NSRect, CGFloat, CGFloat)
@selector("bezierPathWithRoundedRect:xRadius:yRadius:");
// NSBezierPath init(NSRect) @selector("init:");
void moveToPoint(NSPoint) @selector("moveToPoint:");
void lineToPoint(NSPoint) @selector("lineToPoint:");
void curveToPoint(NSPoint, NSPoint, NSPoint)
@selector("curveToPoint:controlPoint1:controlPoint2:");
void closePath() @selector("closePath");
void relativeMove(NSPoint) @selector("relativeMoveToPoint:");
void relativeCurve(NSPoint, NSPoint, NSPoint)
@selector("relativeCurveToPoint:controlPoint1:controlPoint2:");
void append(NSRect) @selector("appendBezierPathWithRect:");
void appendRect(NSRect) @selector("appendBezierPathWithRect:");
void append(NSBezierPath) @selector("appendBezierPath:");
void appendOvalIn(NSRect) @selector("appendBezierPathWithOvalInRect:");
void arcFromPoint(NSPoint, NSPoint, CGFloat)
@selector("appendBezierPathWithArcWithArcFromPoint:toPoint:radius:");
void arcWithCenter(NSPoint, CGFloat, CGFloat, CGFloat)
@selector("appendBezierPathWithArcWithCenter:radius:startAngle:endAngle:");
void roundedRect(NSRect, CGFloat, CGFloat)
@selector("appendBezierPathWithRoundedRect:xRadius:yRadius:");
void windingRule(NSUInteger) @selector("setWindingRule:");
void lineCapStyle(NSUInteger) @selector("setLineCapStyle:");
static void setLineWidth(CGFloat) @selector("setLineWidth:");
static void lineWidth(CGFloat) @selector("setLineWidth:");
void dash(CGFloat*, NSInteger, CGFloat) @selector("setLineDash:count:phase:");
void stroke() @selector("stroke");
void fill() @selector("fill");
static void fillRect(NSRect) @selector("fillRect:");
static void fill(NSRect) @selector("fillRect:");
static void strokeRect(NSRect) @selector("strokeRect:");
static void strokeLine(NSPoint, NSPoint)
@selector("strokeLineFromPoint:toPoint:");
static void defaultLineWidth(CGFloat) @selector("setDefaultLineWidth:");
static NSRect bounds() @selector("bounds");
void transformUsingAffineTransform(NSAffineTransform)
@selector("setTransformUsingAffineTransform:");
}
enum LineJoin : NSUInteger { Miter, Round, Bevel }
enum LineCap : NSUInteger { Butt, Round, Square }
enum NSWindingRule : NSUInteger { NonZero, EvenOdd }
void dashLine(NSBezierPath path, CGFloat[] pattern) {
NSInteger count = cast(long)pattern.length;
path.dash(pattern.ptr, count, 0); } // pattern.ptr == &pattern[0]
void lineDash(NSBezierPath path, CGFloat[] pattern) { dashLine(path, pattern); }
extern (Objective-C)
extern class NSAffineTransform : NSObject {
static NSAffineTransform transform() @selector("transform");
override NSAffineTransform init() @selector("init");
NSAffineTransform init(NSAffineTransform) @selector("initWithTransform:");
void translateXYBy(CGFloat, CGFloat) @selector("translateXBy:yBy:");
void rotateByDegrees(CGFloat) @selector("rotateByDegrees:");
void rotateByRadians(CGFloat) @selector("rotateByRadians:");
void scaleBy(CGFloat) @selector("scaleBy:");
void set() @selector("set");
NSPoint transformPoint(NSPoint) @selector("transformPoint:");
NSSize transformSize(NSSize) @selector("transformSize:");
void concat() @selector("concat");
}
extern (Objective-C)
extern class NSViewController : NSResponder {
NSView view() @selector("view");
void view(NSView view) @selector("setView:");
void loadView() @selector("loadView");
void viewDidLoad() @selector("viewDidLoad");
}
extern (Objective-C)
extern class NSView : NSResponder {
override static NSView alloc() @selector("alloc");
override NSView init() @selector("init");
NSView init(NSRect) @selector("initWithFrame:");
NSArray subviews() @selector("subviews"); // 2023-10-25
void addSubview(NSView) @selector("addSubview:");
void subview(NSView) @selector("addSubview:");
void subView(NSView) @selector("addSubview:");
void drawRect(NSRect rect) @selector("drawRect:");
// void backgroundColor(NSColor) @selector("setBackgroundColor:");
// void bgColor(NSColor) @selector("setBackgroundColor:");
void itemColor(NSColor) @selector("setItemColor:");
void display() @selector("display");
void displayRect(NSRect) @selector("displayRect:");
bool flipped() @selector("flipped");
bool autoresizesSubviews() @selector("autoresizesSubviews");
void autoresizesSubviews(bool) @selector("setAutoresizesSubviews:");
NSUInteger resizingMask(ResizingMask) @selector("setAutoresizingMask:");
NSUInteger resizeMask(ResizeMask) @selector("setAutoresizingMask:");
/* View Coordinates */
NSRect frame() @selector("frame");
void frame(NSRect) @selector("setFrame:"); // OK
void setFrameOrigin(NSPoint) @selector("setFrameOrigin:");
void frameOrigin(NSPoint) @selector("setFrameOrigin:");
void setFrameSize(NSSize) @selector("setFrameSize:");
void frameSize(NSSize) @selector("setFrameSize:");
CGFloat frameRotation() @selector("frameRotation");
void frameRotation(CGFloat) @selector("setFrameRotation:");
CGFloat frameCenterRotation() @selector("frameCenterRotation");
void frameCenterRotation(CGFloat) @selector("setFrameCenterRotation:");
/* Modifying the Bounds Rectangle */
NSRect bounds() @selector("bounds");
void bounds(NSRect) @selector("setBounds:"); // OK
void boundsOrigin(NSPoint) @selector("setBoundsOrigin:");
void boundsSize(NSSize) @selector("setBoundsSize:");
CGFloat boundsRotation() @selector("boundsRotation");
void boundsRotation(CGFloat) @selector("setBoundsRotation:");
/* Modifying the Coordinate System */
void translateOriginToPoint(NSPoint) @selector("translateOriginToPoint:");
void translateOrigin(NSPoint) @selector("translateOriginToPoint:");
void rotateByAngle(CGFloat) @selector("rotateByAngle:");
void rotate(CGFloat) @selector("rotateByAngle:");
/* Core Animation Support */
bool wantsLayer() @selector("wantsLayer");
void wantsLayer(bool) @selector("setWantsLayer:");
bool wantsUpdateLayer() @selector("wantsUpdateLayer");
void redrawPolicy(Redraw) @selector("setLayerContentsRedrawPolicy:");
void needsDisplay(bool) @selector("setNeedsDisplay:");
CGPoint anchorPoint() @selector("anchorPoint");
void anchorPoint(CGPoint) @selector("setAnchorPoint:");
/* Managing interactions Event Handling Scrolling the View */
// void prepareContentInRect(NSRect) @selector("prepareContentInRect:");
// void scrollPoint(NSPoint) @selector("scrollPoint:");
// void scrollRectToVisible(bool) @selector("setScrollRectToVisible:");
void autoscroll(NSEvent) @selector("autoscroll:");
}
enum ResizingMask : NSUInteger {
NotSizable = 0, // 変更不可
Not = 0,
MinXMargin = 1, // 左マージンは変更可
MinX = 1,
WidthSizable = 2, // 幅は変更可
Width = 2,
MaxXMargin = 4, // 右マージンは変更可
MaxX = 4,
MinYMargin = 8, // 下マージンは変更可
MinY = 8,
HeightSizable = 16, // 高さは変更可
Height = 16,
MaxYMargin = 32, // 上マージン変更可
MaxY = 32
}
alias NSAutoresizingMaskOptions = ResizingMask;
alias ResizeMask = ResizingMask;
enum Redraw: NSInteger {
Never = 0,
OnSetNeedsDisplay = 1,
DuringViewResize = 2,
BeforeViewResize = 3,
Crossfade = 4
}
extern (Objective-C)
class CALayer {
static CALayer layer() @selector("layer");
CGColorRef borderColor() @selector("borderColor");
void borderColor(CGColorRef) @selector("setBorderColor:");
// CGColorRef bgColor(CGColorRef) @selector("setBackgroundColor:");
void bgColor(CGColorRef) @selector("setBackgroundColor:");
CATransform3D sublayerTransform() @selector("sublayerTransform");
void sublayerTransform(CATransform3D) @selector("setSublayerTransform:");
CGImage contents() @selector("contents");
CGPoint anchorPoint() @selector("anchorPoint");
void anchorPoint(CGPoint) @selector("setAnchorPoint:");
void position(CGPoint) @selector("setPosition:");
void addSublayer(CALayer) @selector("addSublayer:");
CALayer subLayer(CALayer) @selector("addSublayer:");
/* Creating a Layer */
static CALayer layer() @selector("layer");
CALayer init() @selector("init");
CALayer init(NSObject) @selector("initWithLayer:");
/* Accessing Related Layer Objects */
/* Accessing the Delegate */
CALayerDelegate setDelegate(NSView) @selector("setDelegate:"); // error?
/* Providing the Layer's Content */
/* Modifying the Layer's Appearance */
CGFloat borderWidth() @selector("borderWidth");
void borderWidth(CGFloat) @selector("setBorderWidth:");
/* Layer Filters */
/* Configuring the Layer's Rendering Behavior */
/* Modifying the Layer Geometry */
// CGRect frame() @selector("frame");
// void frame(CGRect) @selector("frame:");
// CGRect bounds() @selector("bounds");
void bounds(CGRect) @selector("setBounds:");
/* Managing the Layer's Transform */
/* Managing the Layer Hierarchy */
/* Updating Layer Display */
/* Layer Animations */
void addAnimation(CAAnimation, NSString) @selector("addAnimation:forKey:");
/* Managing Layer Resizing and Layout */
// CALayoutManager layoutManager() @selector("layoutManager");
void layoutManager(CAConstraintLayoutManager) @selector("setLayoutManager:");
/* Managing Layer Constraints */
/* Getting the Layer's Actions */
/* Mapping Between Coordinate and Time Spaces */
/* Hit Testing */
/* Scrolling */
/* Identifying the Layer */
NSString name() @selector("name");
void name(NSString) @selector("setName:");
/* Key-Value Coding Extensions */
/* Constants */
/* Instance Properties */
/* Type Methods */
}
extern (Objective-C)
extern class CAAnimation : NSObject {
static CAAnimation animation() @selector("animation");
// CAAnimation delegate() @selector("delegate");
static CAAnimation animationWithKeyPath(NSString)
@selector("animationWithKeyPath:");
}
extern (Objective-C)
interface CALayerDelegate {}
extern (Objective-C)
interface CALayoutManager {}
extern (Objective-C)
extern class CAConstraintLayoutManager : NSObject {}
extern (Objective-C)
extern class NSResponder : NSObject {
NSMenu menu() @selector("menu");
void menu(NSMenu menu) @selector("setMenu:");
/* Changing the FirstResponder */
bool acceptsFirstResponder() @selector("acceptsFirstResponder"); //
//
// bool becomeFirstResponder() @selector("becomeFirstResponder");
// void becomeFirstResponder(bool) @selector("setBecomeFirstResponder:");
/* mouse */
void mouseDown(NSEvent) @selector("mouseDown:");
void mouseDragged(NSEvent) @selector("mouseDragged:");
void mouseUp(NSEvent) @selector("mouseUp:");
void mouseMoved(NSEvent) @selector("mouseMoved:");
void mouseEntered(NSEvent) @selector("mouseEntered:");
void mouseExited(NSEvent) @selector("mouseExited:");
void rightMouseDown(NSEvent) @selector("rightMouseDown:");
void rightMouseDragged(NSEvent) @selector("rightMouseDragged:");
void rightMouseUp(NSEvent) @selector("rightMouseUp:");
void otherMouseDown(NSEvent) @selector("otherMouseDown:");
void otherMouseDragged(NSEvent) @selector("otherMouseDragged:");
void otherMouseUp(NSEvent) @selector("otherMouseUp:");
// void flushBufferedKeyEvents() @selector("flushBufferedKeyEvents");
void keyDown(NSEvent) @selector("keyDown:"); //
}
extern (C) NSRect NSInsetRect(NSRect r, CGFloat x, CGFloat y);
CGFloat NSWidth(NSRect r) { return r.size.width; }
CGFloat NSHeight(NSRect r) { return r.size.height; }
CGFloat NSMidX(NSRect r) { return r.origin.x + r.size.width / 2; }
CGFloat NSMidY(NSRect r) { return r.origin.y + r.size.height / 2; }
CGFloat NSMaxX(NSRect r) { return r.origin.x + r.size.width; }
CGFloat NSMaxY(NSRect r) { return r.origin.y + r.size.height; }
CGFloat NSMinX(NSRect r) { return r.origin.x; }
CGFloat NSMinY(NSRect r) { return r.origin.y; }
NSRect nRect(double x, double y, double w, double h) { //
return NSMakeRect(x, y, w, h);
}
extern (Objective-C) //
extern class NSScreen : NSObject {
/* Getting Screen Objects */
NSScreen mainScreen() @selector("mainScreen");
NSRect frame() @selector("frame");
NSRect visibleFrame() @selector("visibleFrame");
NSArray screens() @selector("screens"); //
}
extern (Objective-C)
extern class NSMenu : NSObject {
override static NSMenu alloc() @selector("alloc");
override NSMenu init() @selector("init");
NSMenu init(NSString title) @selector("initWithTitle:");
extern (D) final
NSMenu init(string title) { return init(title.toNs); }
void setSubmenu(NSMenu, NSMenuItem)
@selector("setSubmenu:forItem:");
void submenu(NSMenu, NSMenuItem)
@selector("setSubmenu:forItem:");
void setSubmenu(NSMenu) @selector("setSubmenu:");
void submenu(NSMenu) @selector("setSubmenu:");
void addItem(NSMenuItem) @selector("addItem:");
void item(NSMenuItem) @selector("addItem:");
NSMenuItem addItem(
NSString title,
SEL selector,
NSString charCode
) @selector("addItemWithTitle:action:keyEquivalent:");
extern (D) final
NSMenuItem addItem(string title, SEL selector, string charCode) {
return addItem(title.toNs, selector, charCode.toNs);
}
NSMenuItem item(string title, SEL selector, string charCode) {
return addItem(title.toNs, selector, charCode.toNs);
}
}
extern (Objective-C)
extern class NSMenuItem : NSObject {
override static NSMenuItem alloc() @selector("alloc");
override NSMenuItem init() @selector("init");
static NSMenuItem separatorItem() @selector("separatorItem");
NSMenuItem setSubmenu(NSMenu) @selector("setSubmenu:");
NSMenuItem submenu(NSMenu) @selector("setSubmenu:");
void title(NSString) @selector("setTitle:");
void target(NSObject) @selector("setTarget:");
SEL action(SEL sel) @selector("setAction:");
extern (D) final SEL action_(string str) {
return action(sel_registerName(str.toCs)); }
NSMenuItem init(
NSString title,
SEL selector, //
NSString charCode
) @selector("initWithTitle:action:keyEquivalent:");
extern (D) final
NSMenuItem init(string title, string selector, string charCode) { //
return init(title.toNs, sel_registerName(selector.toCs), charCode.toNs); //
}
}
extern (Objective-C)
extern class NSObject {
static NSObject alloc() @selector("alloc");
NSObject init() @selector("init");
SEL perform(SEL) @selector("performSelector:");
void release() @selector("release");
void dealloc() @selector("dealloc");
}
extern (Objective-C)
extern class NSProcessInfo : NSObject {
static NSProcessInfo processInfo() @selector("processInfo");
NSString processName() @selector("processName");
NSString operatingSystemVersionString()
@selector("operatingSystemVersionString");
NSArray arguments() @selector("arguments"); // 引数文字列の配列
}
extern (Objective-C)
extern class NSNotification { }
/* *** stringAPI *** */
extern (Objective-C)
extern class NSString : NSObject {
override static NSString alloc() @selector("alloc");
override NSString init() @selector("init");
NSString initWith(NSString) @selector("initWithString:"); // copy
NSString init(NSString) @selector("initWithString:"); // copy
NSString initWithBytes(
const(ubyte)* bytes,
NSUInteger length,
NSStringEncoding encoding
) @selector("initWithBytes:length:encoding:");
NSString init(char*) @selector("initWithUTF8String:"); // //
NSString initWith(char*) // //
@selector("initWithUTF8String:"); // C -> ObjC
char* UTF8String() @selector("UTF8String"); // ObjC -> C
// const(char*) toCs() @selector("UTF8String"); // ObjC -> C
override void release() @selector("release");
void draw(NSPoint, NSDictionary) @selector("drawAtPoint:withAttributes:");
void drawAtPoint(NSPoint, NSDictionary)
@selector("drawAtPoint:withAttributes:");
double doubleValue(NSString) @selector("doubleValue:");
int intValue(NSString) @selector("intValue:");
int length() @selector("length");
NSRange rangeOfString(NSString) @selector("rangeOfString:");
NSString substr(NSRange) @selector("substringWithRange:");
static NSString contentsOfFile( // reading data from the file
NSString path,
NSStringEncoding enc,
NSError error)
@selector("stringWithContentsOfFile:encoding:error:"); // 追加
unichar charAt(NSUInteger) @selector("characterAtIndex:");
}
extern (Objective-C)
extern class NSError : NSObject {}
NSString substr(NSString str, int a, int b) {
return str.substr(NSRange(a, b));
}
NSString toNSString(string str) {
return NSString.alloc.initWithBytes(
cast(immutable(ubyte)*) str.ptr,
str.length,
NSStringEncoding.NSUTF8StringEncoding
);
}
extern (Objective-C)
enum NSStringEncoding : NSInteger {
NSUTF8StringEncoding = 4,
UTF8Str = 4 //
}
alias strEncode = NSStringEncoding; //
NSString toNs(string str) { // D string -> NSString
return toNSString(str); }
NSString toNs(char* cstr) { // C string -> NSString
return NSString.alloc.init(cstr); }
string toDs(NSString str) { // NSString -> D string
return str.toCs.to!string; }
string toDs(char* str) { // C string -> D string
return str.to!string; }
char* toCs(NSString str) { // NSString -> C string
return str.UTF8String; }
char* toCs(string str) { // D string -> C string
//return cast(char*) str;
return str.toNs.toCs; }
NSString strCopy(NSString str) { // NSString -> NSString Copy
return NSString.alloc.init(str); }
extern (C) void NSLog(NSString, ...);
/* *** end of stringAPI *** */
extern (Objective-C):
extern class NSAlert : NSObject {
override static NSAlert alloc() @selector("alloc");
override NSAlert init() @selector("init");
void addButton(NSString) @selector("addButtonWithTitle:");
void messageText(NSString) @selector("setMessageText:");
void information(NSString) @selector("setInformativeText:");
void style(NSUInteger) @selector("setAlertStyle:");
uint run() @selector("runModal");
override void release() @selector("release");
void showSuppressionButton(bool) @selector("setShowsSuppressionButton:");
void suppressionButton(bool) @selector("setShowsSuppressionButton:");
void showSupBtn(bool) @selector("setShowsSuppressionButton:");
NSButton suppressionButton() @selector("suppressionButton");
NSButton supBtn() @selector("suppressionButton");
NSImage icon() @selector("icon");
void icon(NSImage) @selector("setIcon:");
}
enum NSAlertButtonReturn : NSUInteger {first = 1000, second, third }
alias AlertButtonReturn = NSAlertButtonReturn;
alias alertButtonReturn = NSAlertButtonReturn;
alias AlertButton = NSAlertButtonReturn;
// enum AlertButtonReturn : NSUInteger {first = 1000, second, third }
// enum AlertButton : NSInteger { first = 1000, second, third }
enum AlertReturn : NSInteger { OK = 1000, Cancel, Other }
// enum Response : NSUInteger { OK = 1000, Cancel, Other }
alias Response = AlertReturn;
alias response = AlertReturn;
enum AlertStyle : NSUInteger { warning, informational, critical }
alias alertStyle = AlertStyle;
enum NSModalResponse : NSInteger {
Cancel = 0,
OK = 1,
Continue = -1002,
Stop = -1000,
Abort = -1001 }
alias ModalResponse = NSModalResponse;
alias modalResponse = NSModalResponse;
enum NSBackingStoreType : size_t {
retained = 0,
Retained = 0,
nonretained = 1,
Nonretained = 1,
buffered = 2,
Buffered = 2, }
alias NSBacking = NSBackingStoreType;
alias Backing = NSBackingStoreType;
alias backing = NSBackingStoreType;
enum NSApplicationActivationPolicy : ptrdiff_t {
regular = 0,
Regular = 0,
accessory = 1,
Accessory = 1,
prohibited = 2,
Prohibited = 2, }
alias NSAppActivationPolicy = NSApplicationActivationPolicy;
enum NSWindowStyleMask : size_t {
borderless = 0,
Borderless = 0,
titled = 1 << 0,
Titled = 1 << 0,
closable = 1 << 1,
Closable = 1 << 1,
miniaturizable = 1 << 2,
Miniaturizable = 1 << 2,
resizable = 1 << 3,
Resizable = 1 << 3,
utilityWindow = 1 << 4, // panel or subclass of NSPanel
UtilityWindow = 1 << 4,
docModalWindow = 1 << 6, // doc-modal Panel (or subclass of NSPanel)
DocModalWindow = 1 << 6,
nonactivatingPanel = 1 << 7, // panel or subclass of NSPanel
NonactivatingPanel = 1 << 7,
texturedBackground = 1 << 8, // Deprecated
TexturedBackground = 1 << 8,
unifiedTitleAndToolbar = 1 << 12, // no effect
UnifiedTitleAndToolbar = 1 << 12,
hUDWindow = 1 << 13, // HUD panel
HUDWindow = 1 << 13,
fullScreen = 1 << 14,
FullScreen = 1 << 14,
fullSizeContentView = 1 << 15,
FullSizeContentView = 1 << 15, }
alias NSWinStyle = NSWindowStyleMask;
alias WinStyle = NSWindowStyleMask;
enum NSEventModifierFlag : size_t {
CapsLock = 1 << 16,
Shift = 1 << 17,
Control = 1 << 18,
Option = 1 << 19, // AlternateKey
Command = 1 << 20,
NumericPad = 1 << 21,
Help = 1 << 22,
Function = 1 << 23,
DeviceIndependent = 0xffff0000 }
struct objc_selector;
alias SEL = objc_selector*;
extern (C) SEL sel_registerName(char* str); //
alias NSUInteger = size_t; // ulong = 8bit
alias NSInteger = ptrdiff_t; // long = 8bit
struct CGColor;
alias CGColorRef = CGColor*;
alias CGFloat = double; // 8bit
alias unichar = wchar;
ulong NSUIntegerMax = ulong.max;
const NSPoint NSZeroPoint = NSMakePoint(0,0);
struct NSPoint {
CGFloat x;
CGFloat y;
}
struct NSSize {
CGFloat width;
CGFloat height;
}
struct NSRect {
NSPoint origin;
NSSize size;
}
pragma(inline, true) NSPoint NSMakePoint(CGFloat x, CGFloat y) {
NSPoint p;
p.x = x;
p.y = y;
return p;
}
pragma(inline, true) NSSize NSMakeSize(CGFloat w, CGFloat h) {
NSSize s;
s.width = w;
s.height = h;
return s;
}
pragma(inline, true) NSRect NSMakeRect(
CGFloat x, CGFloat y, CGFloat w, CGFloat h) {
NSRect r;
r.origin.x = x;
r.origin.y = y;
r.size.width = w;
r.size.height = h;
return r;
}
struct NSRange {
NSUInteger location;
NSUInteger length;
}
pragma(inline, true) NSRange NSMakeRange(NSUInteger loc, NSUInteger len) {
NSRange r;
r.location = loc;
r.length = len;
return r;
}
struct CATransform3D {
CGFloat m11, m12, m13, m14;
CGFloat m21, m22, m23, m24;
CGFloat m31, m32, m33, m34;
CGFloat m41, m42, m43, m44;
}
/*
struct CGAffineTransform {
CGFloat a, b; // [1,1], [1,2], [1,3]=0
CGFloat c, d; // [2,1], [2,2], [2,3]=0
CGFloat tx, ty; // [3,1], [3,2], [3,3]=1
}
const CGAffineTransform CGAffineTransformIdentity;
*/
struct CGImage { }
struct CGPoint {
CGFloat x;
CGFloat y;
}
struct CGSize {
CGFloat width;
CGFloat height;
}
struct CGRect {
CGPoint origin;
CGSize size;
}
/*
struct CGVector {
CGFloat dx;
CGFloat dy;
} */
pragma(inline, true) CGPoint CGPointMake(CGFloat x, CGFloat y) {
CGPoint p;
p.x = x;
p.y = y;
return p;
}
pragma(inline, true) CGSize CGSizeMake(CGFloat w, CGFloat h) {
CGSize s;
s.width = w;
s.height = h;
return s;
}
pragma(inline, true) CGRect CGRectMake(
CGFloat x, CGFloat y, CGFloat w, CGFloat h) {
CGRect r;
r.origin.x = x;
r.origin.y = y;
r.size.width = w;
r.size.height = h;
return r;
}
NSPoint nP(double x, double y) { //
return NSMakePoint(x, y);
}
NSSize nS(double w, double h) { //
return NSMakeSize(w, h);
}
NSRect nR(double x, double y, double w, double h) { //
return NSMakeRect(x, y, w, h);
}
cocoa/control.d
Log
- 2025-03-31 追加・修正しました。
- 2025-03-25 追加・修正しました。
- 2024-08-23 追加・修正しました。
- 2024-08-20 追加・修正しました。
- 2024-08-14 追加・修正しました。
- 2024-07-27 修正しました。
- 2024-06-14 追加・修正しました。
- 2024-06-05 修正しました。
- 2024-04-05 タイポ訂正しました。
- 2024-04-01 削除・修正しました。
- 2024-03-25 追加・修正しました。
- 2024-03-07 追加・修正しました。
- 2024-03-05 追加・修正しました。
- 2024-01-25 追加・修正しました。
- 2023-12-05 追加・修正しました。
- 2023-11-09 追加・修正しました。
- 2023-10-20 追加・修正しました。
- 2023-10-07 追加・修正しました。
- 2023-09-22 追加・修正しました。
- 2023-07-06 修正しました。
- 2023-05-24 追加・修正しました。
- 2023-05-16 追加・修正しました。
- 2023-03-20 追加・修正しました。
- 2023-01-21 修正しました。
- 2023-01-14 toNSStringを追加、toNsの修正をしました。
- 2022-12-21 修正しました。
- 2022-11-18 NSColor に追加しました。
- 2022-11-11 修正しました。
- 2022-07-23 修正、NSRangeを追加しました。
- 2022-06-24 修正しました。
- 2022-05-20 一部修正しました。
- 2022-02-23 ViewController を CocoaAPI の外に置きました。
- 2022-01-22 NSString drawAtPoint 訂正
- 2022-01-01 upload