Xojo Developer Conference
25/27th April 2018 in Denver.
MBS Xojo Conference
6/7th September 2018 in Munich, Germany.

Platforms to show: All Mac Windows Linux Cross-Platform

/MacBase/Custom NSWindows/NSWindow with Pattern/Pattern NSWindow
Required plugins for this example: MBS MacBase Plugin, MBS MacCocoa Plugin, MBS MacControls Plugin, MBS Main Plugin
You find this example project in your Plugins Download as a Xojo project file within the examples folder: /MacBase/Custom NSWindows/NSWindow with Pattern/Pattern NSWindow
This example is the version from Tue, 2nd Apr 2012.
Project "Pattern NSWindow.rbp"
Class App Inherits Application
Const kEditClear = "Effacer"
Const kFileQuit = "Quitter"
Const kFileQuitShortcut = ""
End Class
Class Window1 Inherits Window
Control Canvas1 Inherits Canvas
ControlInstance Canvas1 Inherits Canvas
EventHandler Sub Paint(g As Graphics) dim w1,w2,c As Integer c=20 // corner size w1=g.Width/2 w2=g.Width-w1 g.DrawPicture BookPagesTopLeftCorner, 0,0 // Top Left Corner g.DrawPicture BookPagesTopRightCorner, g.Width-c,0 // Top Right Corner g.DrawPicture BookPagesBottomLeftCorner, 0,g.Height-c // Bottom Left Corner g.DrawPicture BookPagesBottomRightCorner, g.Width-c,g.Height-c // Top Bottom Corner g.DrawPicture BookPagesTopLeftCorner, 0,c, c,g.Height-c-c, 0,c-1, c,1 // Left g.DrawPicture BookPagesTopRightCorner, g.Width-c,c, c,g.Height-c-c, 0,c-1, c,1 // Right g.DrawPicture BookPagesTopLeft, c,0, w1-c,c, 0,0, 268,20 // Top Left g.DrawPicture BookPagesTopRight, w1,0, w2-c,c, 0,0, 268,20 // Top Right g.DrawPicture BookPagesTopLeft, c,c, w1-c,g.Height-c-c, 0,c-1, 268,1 // Left g.DrawPicture BookPagesTopRight, w1,c, w2-c,g.Height-c-c, 0,c-1, 268,1 // Right g.DrawPicture BookPagesBottomLeft, c,g.Height-c, w1-c,c, 0,0, 268,20 // Bottom Left g.DrawPicture BookPagesBottomRight, w1,g.Height-c, w2-c,c, 0,0, 268,20 // Bottom Right End EventHandler
End Control
EventHandler Sub Open() //———————— // Current window //———————— dim w As New NSWindowMBS( Self ) w.backgroundColor = NSColorMBS.colorWithPatternImage( New NSImageMBS( LoopPatternImage ) ) w.acceptsMouseMovedEvents=true dim themeFrame As NSViewMBS = w.contentView.superview dim sa(-1) as NSViewMBS = themeFrame.subviews dim h As Integer = themeFrame.frameHeight //——————————— // Custom Titlebar view //——————————— customFrame = New CustomWindowFrame( 0,0,Self.Width,h ) customFrame.autoresizingMask = NSViewMBS.NSViewWidthSizable+NSViewMBS.NSViewHeightSizable customFrame.BorderImage = New NSImageMBS( FrameBorderImage ) customFrame.BackColor = &cD9A75A00 customFrame.TitleColor = &c4A382000 customFrame.TitleShadowColor = &cF1D3AB00 customFrame.TitleShadowDeltaY = 1 customFrame.TitleTopPadding = 21 customFrame.TitleText = "My Book" themeFrame.addSubview customFrame, NSWindowMBS.NSWindowBelow, sa(0) //—————————— // Titlebar SearchField //—————————— SearchField=New NSSearchFieldMBS( Self.Width-160,h-28,150,20 ) SearchField.autoresizingMask=NSViewMBS.NSViewMinXMargin+NSViewMBS.NSViewMinYMargin themeFrame.addSubview( SearchField ) End EventHandler
Property SearchField As NSSearchFieldMBS
Property Protected customFrame As CustomWindowFrame
End Class
MenuBar MenuBar1
MenuItem FileMenu = "&Fichier"
MenuItem FileQuit = "#App.kFileQuit"
MenuItem EditMenu = "Edition"
MenuItem EditUndo = "Annuler"
MenuItem UntitledMenu1 = "-"
MenuItem EditCut = "Couper"
MenuItem EditCopy = "&Copier"
MenuItem EditPaste = "Coller"
MenuItem EditClear = "#App.kEditClear"
MenuItem UntitledMenu0 = "-"
MenuItem EditSelectAll = "Tout Sélectionner"
End MenuBar
Class CustomWindowFrame Inherits CustomNSViewMBS
EventHandler Sub DrawRect(g as NSGraphicsMBS, left as double, top as double, width as double, height as double) g.saveGraphicsState dim iw,ih,c,w,y,h As Integer // Border image if BorderImage<>Nil then iw=BorderImage.Width ih=BorderImage.height w=frameWidth h=frameHeight c=22 y=frameHeight-c g.drawInRect BorderImage, 0,y, c,c, 0,ih-c, c,c, NSGraphicsMBS.NSCompositeSourceOver, 1.0 // top left part g.drawInRect BorderImage, c,y, w-c-c,c, c,ih-c, 1,c, NSGraphicsMBS.NSCompositeSourceOver, 1.0 // top middle part g.drawInRect BorderImage, w-c,y, c,c, iw-c,ih-c, c,c, NSGraphicsMBS.NSCompositeSourceOver, 1.0 // top right part y=c g.drawInRect BorderImage, 0,y, c,h-c-c, 0,c, c,1, NSGraphicsMBS.NSCompositeSourceOver, 1.0 // left part g.drawInRect BorderImage, w-c,y, c,h-c-c, iw-c,c, c,1, NSGraphicsMBS.NSCompositeSourceOver, 1.0 // right part y=0 g.drawInRect BorderImage, 0,y, c,c, 0,0, c,c, NSGraphicsMBS.NSCompositeSourceOver, 1.0 // bottom left part g.drawInRect BorderImage, c,y, w-c-c,c, c,0, 1,c, NSGraphicsMBS.NSCompositeSourceOver, 1.0 // bottom middle part g.drawInRect BorderImage, w-c,y, c,c, iw-c,0, c,c, NSGraphicsMBS.NSCompositeSourceOver, 1.0 // bottom right part end if // Window title + icon if TitleText<>"" then w=g.sizeWithAttributes( TitleText, TitleAttributes ).Width + TitleIconSpace if TitleIcon<>Nil then TitleIconSpace=19 else TitleIconSpace=0 if w<width-130 then dim pos As New NSPointMBS pos.X=(width/2)-(w/2)+TitleIconSpace pos.Y=frameHeight-TitleTopPadding g.drawAtPoint TitleText, pos, TitleShadowAttributes pos.Y=pos.Y+TitleShadowDeltaY g.drawAtPoint TitleText, pos, TitleAttributes if TitleIcon<>Nil then pos.X=pos.X-TitleIconSpace pos.Y=frameHeight-TitleTopPadding-1 g.drawAtPoint TitleIcon, pos.X,pos.Y, 0,0, 16,16, NSGraphicsMBS.NSCompositeSourceAtop, 1.0 end if end if end if g.restoreGraphicsState End EventHandler
EventHandler Function acceptsFirstMouse(e as NSEventMBS) As boolean Return True End EventHandler
EventHandler Function acceptsFirstResponder() As boolean Return True End EventHandler
EventHandler Function mouseMoved(e as NSEventMBS, x as double, y as double) As boolean if x>8 and x<70 and y>0 then needsDisplay=true end if End EventHandler
EventHandler Sub viewDidMoveToWindow() Dim tx,ts As NSColorMBS Dim NSFont as NSFontMBS = NSFontMBS.boldSystemFontOfSize(0) TitleAttributes = New Dictionary tx=NSColorMBS.colorWithDeviceHSV( TitleColor.Hue, TitleColor.Saturation, TitleColor.Value, 1.0 ) TitleAttributes.Value( NSAttributedStringMBS.NSFontAttributeName )=NSFont TitleAttributes.Value( NSAttributedStringMBS.NSForegroundColorAttributeName )=tx TitleShadowAttributes = New Dictionary ts=NSColorMBS.colorWithDeviceHSV( TitleShadowColor.Hue, TitleShadowColor.Saturation, TitleShadowColor.Value, 1.0 ) TitleShadowAttributes.Value( NSAttributedStringMBS.NSFontAttributeName )=NSFont TitleShadowAttributes.Value( NSAttributedStringMBS.NSForegroundColorAttributeName )=ts if window<>Nil then window.initialFirstResponder = Self end if End EventHandler
Note "Thanks"
Thanks to David Della Rocca for providing this example.
Property BackColor As Color
Property BorderImage As NSImageMBS
Property TitleAttributes As Dictionary
Property TitleColor As Color
Property TitleIcon As NSImageMBS
Property TitleIconSpace As Integer
Property TitleShadowAttributes As Dictionary
Property TitleShadowColor As Color
Property TitleShadowDeltaY As Integer = 1
Property TitleText As String
Property TitleTopPadding As Integer = 19
End Class
ExternalFile LoopPatternImage
End ExternalFile
ExternalFile FrameBorderImage
End ExternalFile
ExternalFile BookPagesBottomLeft
End ExternalFile
ExternalFile BookPagesBottomLeftCorner
End ExternalFile
ExternalFile BookPagesBottomRight
End ExternalFile
ExternalFile BookPagesBottomRightCorner
End ExternalFile
ExternalFile BookPagesTopLeft
End ExternalFile
ExternalFile BookPagesTopLeftCorner
End ExternalFile
ExternalFile BookPagesTopRight
End ExternalFile
ExternalFile BookPagesTopRightCorner
End ExternalFile
End Project

See also:

Feedback, Comments & Corrections

The items on this page are in the following plugins: MBS MacBase Plugin.

MBS FileMaker Plugins