альфа-смешение в GTK - PullRequest
       5

альфа-смешение в GTK

2 голосов
/ 15 июня 2010

Как нарисовать полупрозрачные примитивы, такие как заполненные многоугольники , в Drawable в GTK?

Это 2010 год, и я, гугл, не могу найти, как поместить альфа-значение в цвет для меня. Чего мне не хватает?

Ответы [ 2 ]

4 голосов
/ 15 июня 2010

Используйте gtk.gdk.Drawable.cairo_create() и работайте с возвращенным gtk.gdk.CairoContext. См. документацию . Cairo - это универсальная векторная 2D-библиотека, которая используется в GTK + много лет назад; Примитивы рисования GDK устарели в его пользу (но не весь GDK).

2 голосов
/ 09 февраля 2011

Вот фактический исходный код, чтобы сделать это. Я просто хотел заштриховать весь pixbuf, но чтобы создать фигуру, вам нужно использовать соответствующие методы пути:

def getBlendedPixbuf(pixbuf, (r,g,b,a)):
    """Turn a pixbuf into a blended version of the pixbuf by drawing a
    transparent alpha blend on it."""
    pixbuf = pixbuf.copy()
    #convert pixbuf to Drawable:
    visual = gtk.gdk.visual_get_best()
    screen = visual.get_screen()
    cmap = screen.get_default_colormap()

    w,h = pixbuf.get_width(), pixbuf.get_height()
    drawable = gtk.gdk.Pixmap(
        None, w, h, visual.depth)
    gc = drawable.new_gc()
    drawable.draw_pixbuf(
        gc, pixbuf, 0,0,0,0,-1,-1)

    #do all the drawing on it
    cc = drawable.cairo_create()
    cc.set_source_rgba(r,g,b,a)
    cc.paint()

    #put it back into a pixbhf
    pixbuf.get_from_drawable(
        drawable,cmap,0,0,0,0,w,h)
    return pixbuf
...