GIMP Script-fu

Artifact Content
Login

Artifact 19b3fd45478ea6236530e52d93504b6a0462bbbd:


; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 2 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
; GNU General Public License for more details.


(define (script-fu-sg-add-group-mask image group)
  (gimp-image-undo-group-start image)
  (gimp-context-push)
  (if (zero? (car (gimp-item-is-group group)))
    (begin
      (gimp-message "Layer must be a group"))
    (let ((x-offset (car (gimp-drawable-offsets group)))
          (y-offset (cadr (gimp-drawable-offsets group))) 
          (group-mask (car (gimp-layer-new image 
                                     (car (gimp-drawable-width group))
                                     (car (gimp-drawable-height group))
                                     (car (gimp-drawable-type group))
                                     "Group Mask"
                                     100
                                     24 ; REPLACE-MODE
                                     ))))
      (gimp-context-set-default-colors) 
      (gimp-drawable-fill group-mask TRANSPARENT-FILL)
      (gimp-image-insert-layer image group-mask group 0)
      (gimp-layer-set-offsets group-mask x-offset y-offset)
      (gimp-edit-fill group-mask FOREGROUND-FILL)
      (gimp-selection-invert image)
      (let ((layer-mask (car (gimp-layer-create-mask group-mask ADD-SELECTION-MASK))))
        (gimp-layer-add-mask group-mask layer-mask))
      (gimp-selection-invert image)
      (gimp-image-set-active-layer image group)))
  (gimp-context-pop)
  (gimp-image-undo-group-end image)
  (gimp-displays-flush)
  )

(script-fu-register "script-fu-sg-add-group-mask"
  "Add Group Mask  (from selection)"
  "Insert a layer that behaves as a group mask"
  "Saul Goode"
  "saulgoode"
  "February 2015"
  "*"
  SF-IMAGE    "Image"    0
  SF-DRAWABLE "Drawable" 0
  )
(script-fu-menu-register "script-fu-sg-add-group-mask"
  "<Layers>"
  )
(script-fu-menu-register "script-fu-sg-add-group-mask"
  "<Image>/Layer/Mask"
  )