Esempio n. 1
0
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
}
Esempio n. 2
0
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
}
Esempio n. 3
0
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
}