; PIKA - Photo and Image Kooker Application ; Copyright (C) 1995 Spencer Kimball and Peter Mattis ; ; 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 3 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. ; ; You should have received a copy of the GNU General Public License ; along with this program. If not, see . ; ; Copyright (C) 1997 Andy Thomas alt@picnic.demon.co.uk ; ; Version 0.2 10.6.97 Changed to new script-fu interface in 0.99.10 ; Delta the color by the given amount. Check for boundary conditions ; If < 0 set to zero ; If > 255 set to 255 ; Return the new value (define (script-fu-addborder aimg adraw xsize ysize color dvalue allow-resize) (define (deltacolor col delta) (let* ((newcol (+ col delta))) (if (< newcol 0) (set! newcol 0)) (if (> newcol 255) (set! newcol 255)) newcol ) ) (define (adjcolor col delta) (mapcar (lambda (x) (deltacolor x delta)) col) ) (define (gen_top_array xsize ysize owidth oheight width height) (let* ((n_array (cons-array 10 'double))) (aset n_array 0 0 ) (aset n_array 1 0 ) (aset n_array 2 xsize) (aset n_array 3 ysize) (aset n_array 4 (+ xsize owidth)) (aset n_array 5 ysize) (aset n_array 6 width) (aset n_array 7 0 ) (aset n_array 8 0 ) (aset n_array 9 0 ) n_array) ) (define (gen_left_array xsize ysize owidth oheight width height) (let* ((n_array (cons-array 10 'double))) (aset n_array 0 0 ) (aset n_array 1 0 ) (aset n_array 2 xsize) (aset n_array 3 ysize) (aset n_array 4 xsize) (aset n_array 5 (+ ysize oheight)) (aset n_array 6 0 ) (aset n_array 7 height ) (aset n_array 8 0 ) (aset n_array 9 0 ) n_array) ) (define (gen_right_array xsize ysize owidth oheight width height) (let* ((n_array (cons-array 10 'double))) (aset n_array 0 width ) (aset n_array 1 0 ) (aset n_array 2 (+ xsize owidth)) (aset n_array 3 ysize) (aset n_array 4 (+ xsize owidth)) (aset n_array 5 (+ ysize oheight)) (aset n_array 6 width) (aset n_array 7 height) (aset n_array 8 width ) (aset n_array 9 0 ) n_array) ) (define (gen_bottom_array xsize ysize owidth oheight width height) (let* ((n_array (cons-array 10 'double))) (aset n_array 0 0 ) (aset n_array 1 height) (aset n_array 2 xsize) (aset n_array 3 (+ ysize oheight)) (aset n_array 4 (+ xsize owidth)) (aset n_array 5 (+ ysize oheight)) (aset n_array 6 width) (aset n_array 7 height) (aset n_array 8 0 ) (aset n_array 9 height) n_array) ) (let* ((img (car (pika-item-get-image adraw))) (imagewidth (car (pika-image-get-width img))) (imageheight (car (pika-image-get-height img))) (innerwidth 0) (innerheight 0) (outerwidth 0) (outerheight 0)) (if (= allow-resize TRUE) (begin (set! outerwidth (+ imagewidth (* 2 xsize))) (set! outerheight (+ imageheight (* 2 ysize))) (set! innerwidth imagewidth) (set! innerheight imageheight)) (begin (set! outerwidth imagewidth) (set! outerheight imageheight) (set! innerwidth (- imagewidth (* 2 xsize))) (set! innerheight (- imageheight (* 2 ysize))))) (let* ((layer (car (pika-layer-new img outerwidth outerheight (car (pika-drawable-type-with-alpha adraw)) _"Border Layer" 100 LAYER-MODE-NORMAL)))) (pika-context-push) (pika-context-set-antialias FALSE) (pika-context-set-feather FALSE) (pika-image-undo-group-start img) (if (= allow-resize TRUE) (pika-image-resize img outerwidth outerheight xsize ysize)) (pika-image-insert-layer img layer 0 0) (pika-drawable-fill layer FILL-TRANSPARENT) (pika-context-set-background (adjcolor color dvalue)) (pika-image-select-polygon img CHANNEL-OP-REPLACE 10 (gen_top_array xsize ysize innerwidth innerheight outerwidth outerheight)) (pika-drawable-edit-fill layer FILL-BACKGROUND) (pika-context-set-background (adjcolor color (/ dvalue 2))) (pika-image-select-polygon img CHANNEL-OP-REPLACE 10 (gen_left_array xsize ysize innerwidth innerheight outerwidth outerheight)) (pika-drawable-edit-fill layer FILL-BACKGROUND) (pika-context-set-background (adjcolor color (- 0 (/ dvalue 2)))) (pika-image-select-polygon img CHANNEL-OP-REPLACE 10 (gen_right_array xsize ysize innerwidth innerheight outerwidth outerheight)) (pika-drawable-edit-fill layer FILL-BACKGROUND) (pika-context-set-background (adjcolor color (- 0 dvalue))) (pika-image-select-polygon img CHANNEL-OP-REPLACE 10 (gen_bottom_array xsize ysize innerwidth innerheight outerwidth outerheight)) (pika-drawable-edit-fill layer FILL-BACKGROUND) (pika-selection-none img) (pika-image-undo-group-end img) (pika-displays-flush) (pika-context-pop) ) ) ) (script-fu-register "script-fu-addborder" _"Add _Border..." _"Add a border around an image" "Andy Thomas , Michael Schumacher " "Andy Thomas, Michael Schumacher" "6/10/1997, 26/05/2017" "*" SF-IMAGE "Input image" 0 SF-DRAWABLE "Input drawable" 0 SF-ADJUSTMENT _"Border X size" '(12 1 250 1 10 0 1) SF-ADJUSTMENT _"Border Y size" '(12 1 250 1 10 0 1) SF-COLOR _"Border color" '(38 31 207) SF-ADJUSTMENT _"Delta value on color" '(25 1 255 1 10 0 1) SF-TOGGLE _"Allow resizing" TRUE ) (script-fu-menu-register "script-fu-addborder" "/Filters/Decor")