本文整理汇总了Golang中github.com/shibukawa/nanovgo.Context.ResetScissor方法的典型用法代码示例。如果您正苦于以下问题:Golang Context.ResetScissor方法的具体用法?Golang Context.ResetScissor怎么用?Golang Context.ResetScissor使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/shibukawa/nanovgo.Context
的用法示例。
在下文中一共展示了Context.ResetScissor方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: drawScissor
func drawScissor(ctx *nanovgo.Context, x, y, t float32) {
ctx.Save()
// Draw first rect and set scissor to it's area.
ctx.Translate(x, y)
ctx.Rotate(nanovgo.DegToRad(5))
ctx.BeginPath()
ctx.Rect(-20, -20, 60, 40)
ctx.SetFillColor(nanovgo.RGBA(255, 0, 0, 255))
ctx.Fill()
ctx.Scissor(-20, -20, 60, 40)
// Draw second rectangle with offset and rotation.
ctx.Translate(40, 0)
ctx.Rotate(t)
// Draw the intended second rectangle without any scissoring.
ctx.Save()
ctx.ResetScissor()
ctx.BeginPath()
ctx.Rect(-20, -10, 60, 30)
ctx.SetFillColor(nanovgo.RGBA(255, 128, 0, 64))
ctx.Fill()
ctx.Restore()
// Draw second rectangle with combined scissoring.
ctx.IntersectScissor(-20, -10, 60, 30)
ctx.BeginPath()
ctx.Rect(-20, -10, 60, 30)
ctx.SetFillColor(nanovgo.RGBA(255, 128, 0, 255))
ctx.Fill()
ctx.Restore()
}
示例2: Draw
func (w *Window) Draw(self Widget, ctx *nanovgo.Context) {
ds := float32(w.theme.WindowDropShadowSize)
cr := float32(w.theme.WindowCornerRadius)
hh := float32(w.theme.WindowHeaderHeight)
// Draw window
wx := float32(w.x)
wy := float32(w.y)
ww := float32(w.w)
wh := float32(w.h)
ctx.Save()
ctx.BeginPath()
ctx.RoundedRect(wx, wy, ww, wh, cr)
if w.mouseFocus {
ctx.SetFillColor(w.theme.WindowFillFocused)
} else {
ctx.SetFillColor(w.theme.WindowFillUnfocused)
}
ctx.Fill()
// Draw a drop shadow
shadowPaint := nanovgo.BoxGradient(wx, wy, ww, wh, cr*2, ds*2, w.theme.DropShadow, w.theme.Transparent)
ctx.BeginPath()
ctx.Rect(wx-ds, wy-ds, ww+ds*2, wh+ds*2)
ctx.RoundedRect(wx, wy, ww, wh, cr)
ctx.PathWinding(nanovgo.Hole)
ctx.SetFillPaint(shadowPaint)
ctx.Fill()
if w.title != "" {
headerPaint := nanovgo.LinearGradient(wx, wy, ww, wh+hh, w.theme.WindowHeaderGradientTop, w.theme.WindowHeaderGradientBot)
ctx.BeginPath()
ctx.RoundedRect(wx, wy, ww, hh, cr)
ctx.SetFillPaint(headerPaint)
ctx.Fill()
ctx.BeginPath()
ctx.RoundedRect(wx, wy, ww, wh, cr)
ctx.SetStrokeColor(w.theme.WindowHeaderSepTop)
ctx.Scissor(wx, wy, ww, 0.5)
ctx.Stroke()
ctx.ResetScissor()
ctx.BeginPath()
ctx.MoveTo(wx+0.5, wy+hh-1.5)
ctx.LineTo(wx+ww-0.5, wy+hh-1.5)
ctx.SetStrokeColor(w.theme.WindowHeaderSepTop)
ctx.Stroke()
ctx.SetFontSize(18.0)
ctx.SetFontFace(w.theme.FontBold)
ctx.SetTextAlign(nanovgo.AlignCenter | nanovgo.AlignMiddle)
ctx.SetFontBlur(2.0)
ctx.SetFillColor(w.theme.DropShadow)
ctx.Text(wx+ww*0.5, wy+hh*0.5, w.title)
ctx.SetFontBlur(0.0)
if w.focused {
ctx.SetFillColor(w.theme.WindowTitleFocused)
} else {
ctx.SetFillColor(w.theme.WindowTitleUnfocused)
}
ctx.Text(wx+ww*0.5, wy+hh*0.5-1, w.title)
}
ctx.Restore()
w.WidgetImplement.Draw(self, ctx)
}
示例3: Draw
//.........这里部分代码省略.........
drawPosX += t.textOffset
if t.committed {
ctx.Text(drawPosX, drawPosY, t.value)
} else {
text := t.editingText()
textString := string(text)
_, bounds := ctx.TextBounds(drawPosX, drawPosY, textString)
lineH := bounds[3] - bounds[1]
// find cursor positions
glyphs := ctx.TextGlyphPositionsRune(drawPosX, drawPosY, text)
t.updateCursor(ctx, bounds[2], glyphs)
// compute text offset
prevCPos := toI(t.cursorPos > 0, t.cursorPos-1, 0)
nextCPos := toI(t.cursorPos < len(glyphs), t.cursorPos+1, len(glyphs))
prevCX := t.textIndex2Position(prevCPos, bounds[2], glyphs)
nextCX := t.textIndex2Position(nextCPos, bounds[2], glyphs)
if nextCX > clipX+clipWidth {
t.textOffset -= nextCX - (clipX + clipWidth) + 1.0
}
if prevCX < clipX {
t.textOffset += clipX - prevCX + 1.0
}
drawPosX = oldDrawPosX + t.textOffset
// draw text with offset
ctx.TextRune(drawPosX, drawPosY, text)
_, bounds = ctx.TextBounds(drawPosX, drawPosY, textString)
// recompute cursor position
glyphs = ctx.TextGlyphPositionsRune(drawPosX, drawPosY, text)
var caretX float32 = -1
if len(t.preeditText) != 0 {
// draw preedit text
caretX = t.textIndex2Position(t.cursorPos+len(t.preeditText), bounds[2], glyphs)
offsetIndex := t.cursorPos
offsetX := t.textIndex2Position(t.cursorPos, bounds[2], glyphs)
ctx.SetStrokeColor(nanovgo.MONO(255, 160))
ctx.SetFillColor(nanovgo.MONO(255, 80))
ctx.SetStrokeWidth(2.0)
for i, blockLength := range t.preeditBlocks {
nextOffsetIndex := offsetIndex + blockLength
nextOffsetX := t.textIndex2Position(nextOffsetIndex, bounds[2], glyphs)
if i != t.preeditFocusedBlock {
ctx.BeginPath()
ctx.MoveTo(offsetX+2, drawPosY+lineH*0.5-1)
ctx.LineTo(nextOffsetX-2, drawPosY+lineH*0.5-1)
ctx.Stroke()
} else {
ctx.BeginPath()
ctx.Rect(offsetX, drawPosY-lineH*0.5, nextOffsetX-offsetX, lineH)
ctx.Fill()
}
offsetIndex = nextOffsetIndex
offsetX = nextOffsetX
}
screen := t.FindWindow().Parent().(*Screen)
oldCurX, oldCurY, oldCurH := screen.PreeditCursorPos()
absX, absY := t.Parent().AbsolutePosition()
newCurX := int(caretX) + absX
newCurY := int(drawPosY+lineH*0.5) + absY
newCurH := int(lineH)
if oldCurX != newCurX || oldCurY != newCurY || oldCurH != newCurH {
screen.SetPreeditCursorPos(newCurX, newCurY, newCurH)
}
} else if t.cursorPos > -1 {
// regular cursor and selection area
caretX = t.textIndex2Position(t.cursorPos, bounds[2], glyphs)
if t.selectionPos > -1 {
caretX2 := caretX
selX := t.textIndex2Position(t.selectionPos, bounds[2], glyphs)
if caretX2 > selX {
selX, caretX2 = caretX2, selX
}
// draw selection
ctx.BeginPath()
ctx.SetFillColor(nanovgo.MONO(255, 80))
ctx.Rect(caretX2, drawPosY-lineH*0.5, selX-caretX2, lineH)
ctx.Fill()
}
}
if caretX > 0 {
// draw cursor
ctx.BeginPath()
ctx.MoveTo(caretX, drawPosY-lineH*0.5)
ctx.LineTo(caretX, drawPosY+lineH*0.5)
ctx.SetStrokeColor(nanovgo.RGBA(255, 192, 0, 255))
ctx.SetStrokeWidth(1.0)
ctx.Stroke()
}
}
ctx.ResetScissor()
}