class ImageComposer

Public Class Methods

new() click to toggle source
Calls superclass method
# File examples/painting/imagecomposition/imagecomposer.rb, line 32
def initialize()
    super()

    @sourceButton = Qt::ToolButton.new
    @sourceButton.iconSize = @@resultSize

    @operatorComboBox = Qt::ComboBox.new
    addOp(Qt::Painter::CompositionMode_SourceOver, tr("SourceOver"))
    addOp(Qt::Painter::CompositionMode_DestinationOver, tr("DestinationOver"))
    addOp(Qt::Painter::CompositionMode_Clear, tr("Clear"))
    addOp(Qt::Painter::CompositionMode_Source, tr("Source"))
    addOp(Qt::Painter::CompositionMode_Destination, tr("Destination"))
    addOp(Qt::Painter::CompositionMode_SourceIn, tr("SourceIn"))
    addOp(Qt::Painter::CompositionMode_DestinationIn, tr("DestinationIn"))
    addOp(Qt::Painter::CompositionMode_SourceOut, tr("SourceOut"))
    addOp(Qt::Painter::CompositionMode_DestinationOut, tr("DestinationOut"))
    addOp(Qt::Painter::CompositionMode_SourceAtop, tr("SourceAtop"))
    addOp(Qt::Painter::CompositionMode_DestinationAtop, tr("DestinationAtop"))
    addOp(Qt::Painter::CompositionMode_Xor, tr("Xor"))

    @destinationButton = Qt::ToolButton.new
    @destinationButton.iconSize = @@resultSize

    @equalLabel = Qt::Label.new(tr("="))

    @resultLabel = Qt::Label.new
    @resultLabel.minimumWidth = @@resultSize.width()

    connect(@sourceButton, SIGNAL(:clicked), self, SLOT(:chooseSource))
    connect(@operatorComboBox, SIGNAL('activated(int)'),
            self, SLOT('recalculateResult()'))
    connect(@destinationButton, SIGNAL(:clicked),
            self, SLOT(:chooseDestination))

    self.layout = Qt::GridLayout.new do |m|
        m.addWidget(@sourceButton, 0, 0, 3, 1)
        m.addWidget(@operatorComboBox, 1, 1)
        m.addWidget(@destinationButton, 0, 2, 3, 1)
        m.addWidget(@equalLabel, 1, 3)
        m.addWidget(@resultLabel, 0, 4, 3, 1)
        m.sizeConstraint = Qt::Layout::SetFixedSize
    end

    @resultImage = Qt::Image.new(@@resultSize, Qt::Image::Format_ARGB32_Premultiplied)

    @sourceImage = Qt::Image.new
    @destinationImage = Qt::Image.new

    loadImage(":/images/butterfly.png", @sourceImage, @sourceButton)
    loadImage(":/images/checker.png", @destinationImage, @destinationButton)


    setWindowTitle(tr("Image Composition"))
end

Public Instance Methods

addOp(mode, name) click to toggle source
# File examples/painting/imagecomposition/imagecomposer.rb, line 113
def addOp(mode, name)
    @operatorComboBox.addItem(name, Qt::Variant.new(mode.to_i))
end
chooseDestination() click to toggle source
# File examples/painting/imagecomposition/imagecomposer.rb, line 91
def chooseDestination()
    chooseImage(tr("Choose Destination Image"), @destinationImage,
                @destinationButton)
end
chooseImage(title, image, button) click to toggle source
# File examples/painting/imagecomposition/imagecomposer.rb, line 117
def chooseImage(title, image, button)
    fileName = Qt::FileDialog.getOpenFileName(self, title)
    if !fileName.nil?
        loadImage(fileName, image, button)
    end
end
chooseSource() click to toggle source
# File examples/painting/imagecomposition/imagecomposer.rb, line 87
def chooseSource()
    chooseImage(tr("Choose Source Image"), @sourceImage, @sourceButton)
end
currentMode() click to toggle source
# File examples/painting/imagecomposition/imagecomposer.rb, line 144
def currentMode()
    return @operatorComboBox.itemData(@operatorComboBox.currentIndex()).to_i
end
imagePos(image) click to toggle source
# File examples/painting/imagecomposition/imagecomposer.rb, line 148
def imagePos(image)
    return Qt::Point.new((@@resultSize.width() - image.width()) / 2,
                  (@@resultSize.height() - image.height()) / 2)
end
loadImage(fileName, image, button) click to toggle source
# File examples/painting/imagecomposition/imagecomposer.rb, line 124
    def loadImage(fileName, image, button)
        image.load(fileName)
    
        fixedImage = Qt::Image.new(@@resultSize, Qt::Image::Format_ARGB32_Premultiplied)
        painter = Qt::Painter.new(fixedImage)
        painter.compositionMode = Qt::Painter::CompositionMode_Source
        painter.fillRect(fixedImage.rect(), Qt::Brush.new(Qt::transparent))
        painter.compositionMode = Qt::Painter::CompositionMode_SourceOver
        painter.drawImage(imagePos(image), image)
        painter.end
        button.icon = Qt::Icon.new(Qt::Pixmap.fromImage(fixedImage))
    
#       The 'QImage::operator=()' method to use as an assignment isn't easily called
#       in QtRuby, so use the convenience method Qt::Image.fromImage() instead
#       image = fixedImage
        image.fromImage(fixedImage)

        recalculateResult()
    end
recalculateResult() click to toggle source
# File examples/painting/imagecomposition/imagecomposer.rb, line 96
def recalculateResult()
    mode = currentMode()

    painter = Qt::Painter.new(@resultImage)
    painter.compositionMode = Qt::Painter::CompositionMode_Source
    painter.fillRect(@resultImage.rect(), Qt::Brush.new(Qt::transparent))
    painter.compositionMode = Qt::Painter::CompositionMode_SourceOver
    painter.drawImage(0, 0, @destinationImage)
    painter.compositionMode = mode
    painter.drawImage(0, 0, @sourceImage)
    painter.compositionMode = Qt::Painter::CompositionMode_DestinationOver
    painter.fillRect(@resultImage.rect(), Qt::Brush.new(Qt::white))
    painter.end

    @resultLabel.pixmap = Qt::Pixmap.fromImage(@resultImage)
end