func createBitmap() *drawing.Bitmap { bounds := drawing.Rectangle{Width: 200, Height: 200} bmp, err := drawing.NewBitmap(bounds.Size()) panicIfErr(err) surface, err := drawing.NewSurfaceFromImage(bmp) panicIfErr(err) defer surface.Dispose() brushBmp, err := drawing.NewBitmapFromFile("img/plus.png") panicIfErr(err) defer brushBmp.Dispose() brush, err := drawing.NewBitmapBrush(brushBmp) panicIfErr(err) defer brush.Dispose() panicIfErr(surface.FillRectangle(brush, bounds)) font, err := drawing.NewFont("Times New Roman", 40, drawing.FontBold|drawing.FontItalic) panicIfErr(err) defer font.Dispose() panicIfErr(surface.DrawText("Runtime Created Bitmap", font, drawing.RGB(0, 0, 0), bounds, drawing.TextWordbreak)) return bmp }
func (w *Widget) Bounds() (drawing.Rectangle, os.Error) { var r RECT if !GetWindowRect(w.hWnd, &r) { return drawing.Rectangle{}, lastError("GetWindowRect") } b := drawing.Rectangle{X: r.Left, Y: r.Top, Width: r.Right - r.Left, Height: r.Bottom - r.Top} if w.parent != nil { p := POINT{b.X, b.Y} if !ScreenToClient(w.hWnd, &p) { return drawing.Rectangle{}, newError("ScreenToClient failed") } b.X = p.X b.Y = p.Y } return b, nil }
func (item *simpleTextItem) AddNewPart(surface *drawing.Surface, bounds drawing.Rectangle) (part part, more bool, err os.Error) { partCount := len(item.parts) var offset int if partCount > 0 { prevPart := item.parts[len(item.parts)-1] offset = prevPart.offset + prevPart.length } runeCount := item.text.RuneCount() text := item.text.Slice(offset, runeCount) fontHeight, err := surface.FontHeight(item.font) if err != nil { return } bounds.Height = (bounds.Height / fontHeight) * fontHeight if bounds.Height == 0 { more = true return } boundsMeasured, runesFitted, err := surface.MeasureText(text, item.font, bounds, item.format) if err != nil { return } p := &simpleTextPart{ item: item, offset: offset, length: runesFitted, bounds: boundsMeasured, } if partCount == cap(item.parts) { parts := make([]*simpleTextPart, partCount, partCount*2) copy(parts, item.parts) item.parts = parts } item.parts = item.parts[0 : partCount+1] item.parts[partCount] = p part = p more = p.offset+p.length < runeCount return }