;;mhshadow
;Kiki
;http://kikidide.yuki-mura.net/GIMP/gimp.htm
;http://kikidide.yuki-mura.net/GIMP/engimp.htm
;

(define (script-fu-mhshadow text size font md color mgrad mtex usc? mcolor bd bri sh usec? ft?)
  (let* ((img (car (gimp-image-new 256 256 RGB)))
;;文字
	 (text-layer (car (gimp-text-fontname img -1 0 0 text (+ (/ size 12) 4) TRUE size PIXELS font)))
;;幅と高さ
	 (width (car (gimp-drawable-width text-layer)))
	 (height (car (gimp-drawable-height text-layer)))
;;背景
	 (bg-layer (car (gimp-layer-new img width height RGB-IMAGE "Background" 100 NORMAL-MODE)))

         (old-fg (car (gimp-palette-get-foreground)))
         (old-grad (car (gimp-gradients-get-gradient)))
)
    (gimp-image-undo-disable img)
;;サイズ調整
    (gimp-image-resize img width height 0 0)

;;前景色の決定
    (gimp-palette-set-foreground color)
    (gimp-layer-set-preserve-trans text-layer TRUE)
    (gimp-edit-fill text-layer FOREGROUND-FILL)
    (cond((= md 1)
       (gimp-gradients-set-gradient mgrad)
       (gimp-blend text-layer CUSTOM-MODE NORMAL-MODE GRADIENT-LINEAR 100 20 REPEAT-NONE
                                            FALSE 0 0 0 0 0 0 width height))
       ((= md 2)
       (gimp-patterns-set-pattern mtex)
       (gimp-edit-bucket-fill text-layer PATTERN-BUCKET-FILL NORMAL-MODE 100 255 FALSE 0 0)
     ))
    (gimp-brightness-contrast text-layer -100 0)
    (if (= usc? TRUE)
    (begin
      (gimp-palette-set-foreground mcolor)
      (gimp-layer-set-preserve-trans text-layer TRUE)
      (gimp-edit-fill text-layer FOREGROUND-FILL)
    ))
;;背景色の決定
;    (gimp-palette-set-foreground '(255 255 255))
;    (gimp-image-add-layer img bg-layer 1)
;    (gimp-drawable-fill bg-layer FOREGROUND-FILL)

    (script-fu-mhshadowimg img text-layer md color mgrad mtex bd bri sh usec? 15 ft?)

;    (if (= ft? TRUE) (gimp-image-flatten img))

    (gimp-palette-set-foreground old-fg)
    (gimp-gradients-set-gradient old-grad)

    (gimp-image-undo-enable img)
    (gimp-display-new img)
))

(script-fu-register "script-fu-mhshadow"
		    "<Toolbox>/Xtns/Script-Fu/MH/shadow"
		    "mhshadow"
		    "Kiki"
		    "Kiki"
		    "2005/1"
		    ""
		    SF-STRING     "Text String"        "Shadow"
		    SF-ADJUSTMENT "Font Size (pixels)" '(100 2 1000 1 2 0 1)
		    SF-FONT       "Font"               "MeltLV1"
                    SF-OPTION     "mode"               '(_"color" _"gradient" _"texture")
		    SF-COLOR      "Color"              '(255 222 222)
                    SF-GRADIENT   "Gradient"           "Pastels"
                    SF-PATTERN    "Pattern"            "Pink Marble"
                    SF-TOGGLE     "use shadow color?"   FALSE
                    SF-COLOR      "Shadow Color"       '(255 200 200)
		    SF-ADJUSTMENT "bold&blur"          '(5 1 10 1 2 0 0)
		    SF-ADJUSTMENT "bright"             '(40 0 127 1 2 0 0)
		    SF-ADJUSTMENT "shadow"             '(5 1 10 1 2 0 0)
                    SF-TOGGLE     "use original color?"	FALSE
                    SF-TOGGLE     "flatten?"          FALSE
)

(define (script-fu-mhshadowimg img drawable md color mgrad mtex bd bri sh usec? usecth ft?)
  (let* (

;;幅と高さ
	 (width (car (gimp-drawable-width drawable)))
	 (height (car (gimp-drawable-height drawable)))

	 (cc-layer (car (gimp-layer-new img width height RGBA-IMAGE "cc" 100 NORMAL-MODE)))

         (old-fg (car (gimp-palette-get-foreground)))
         (old-grad (car (gimp-gradients-get-gradient)))

;;2.4追加
	 (layer0)
	 (bgcopy)
	 (dummy)
	 (layer00)
	 (layer0c)
	 (bgcopyc)
	 (tg)
	 (tg2)
	 (moji)
	 (cc2)
	 (cc3)
	 (kansei)
)
    (gimp-image-undo-group-start img)

    (set! layer0 (car (gimp-image-flatten img)))
    (set! bgcopy (car (gimp-layer-copy layer0 0)))
    (gimp-image-add-layer img bgcopy 0)
    (plug-in-gauss-iir2 1 img layer0 bd bd)
    (set! dummy (car (gimp-layer-copy layer0 0)))
    (gimp-layer-translate layer0 (+ 2 (/ bd 5)) (+ 2 (/ bd 5)))
    (gimp-image-add-layer img dummy 2)
    (set! layer00 (car (gimp-image-merge-down img layer0 0)))
    (set! layer0c (car (gimp-layer-copy layer00 0)))
    (gimp-image-add-layer img layer0c 1)
    (plug-in-edge 1 img layer00 sh 1 0)
    (set! bgcopyc (car (gimp-layer-copy bgcopy 0)))
    (gimp-image-add-layer img bgcopyc 0)
    (gimp-invert layer0c)
    (gimp-layer-set-opacity bgcopy 50)
    (set! tg (car (gimp-image-merge-down img bgcopy 0)))
    (gimp-invert tg)
    (gimp-layer-set-opacity tg 50)
    (set! tg2 (car (gimp-image-merge-down img tg 0)))
    (gimp-invert tg2)
    (plug-in-edge 1 img bgcopyc 2 1 0)
    (plug-in-gauss-iir2 1 img bgcopyc bd bd)
    (gimp-layer-set-mode bgcopyc 4)
    (set! moji (car (gimp-image-flatten img)))
    (gimp-image-add-layer img cc-layer 0)
    (gimp-palette-set-foreground color)
    (gimp-edit-fill cc-layer FOREGROUND-FILL)
    (cond((= md 1)
       (gimp-gradients-set-gradient mgrad)
       (gimp-blend cc-layer CUSTOM-MODE NORMAL-MODE GRADIENT-LINEAR 100 20 REPEAT-NONE
                                            FALSE 0 0 0 0 0 0 width height))
       ((= md 2)
       (gimp-patterns-set-pattern mtex)
       (gimp-edit-bucket-fill cc-layer PATTERN-BUCKET-FILL NORMAL-MODE 100 255 FALSE 0 0)
     ))
    (gimp-brightness-contrast moji bri 0)
    (gimp-layer-set-mode cc-layer 5)
    (set! cc2 (car (gimp-layer-copy cc-layer 0)))
    (gimp-image-add-layer img cc2 0)
    (gimp-brightness-contrast cc2 60 0)
    (gimp-layer-set-mode cc2 3)

    (if(= usec? TRUE)
    (begin
    (set! cc3 (car (gimp-layer-copy cc-layer 0)))
    (gimp-image-add-layer img cc3 0)
    (gimp-by-color-select moji '(202 202 202) usecth REPLACE TRUE FALSE 0 FALSE)
    (gimp-selection-feather img 5)
    (gimp-selection-invert img)
    (gimp-edit-clear cc3)
    (gimp-selection-none img)
    (gimp-layer-set-mode cc3 NORMAL)
    ))

;    (set! kansei (car (gimp-image-flatten img)))

    (if (= ft? TRUE) (gimp-image-flatten img))

    (gimp-palette-set-foreground old-fg)
    (gimp-gradients-set-gradient old-grad)

    (gimp-image-undo-group-end img)
    (gimp-displays-flush)
))


;画像加工本体
(define (script-fu-mhshadowimgh img drawable md color mgrad mtex bd bri sh usec? usecth ft?)
  (let* (
	(img2 (car (gimp-channel-ops-duplicate img)))
	(drawable2 (car (gimp-image-get-active-layer img2)))
	)
	(script-fu-mhshadowimg img2 drawable2 md color mgrad mtex bd bri sh usec? usecth ft?)
	(gimp-display-new img2)
  )
)

(script-fu-register "script-fu-mhshadowimg"
		    "<Image>/Script-Fu/MH/shadow"
		    "mhshadowimgh"
		    "Kiki"
		    "Kiki"
		    "2005/1"
		    "RGB*"
		    SF-IMAGE      "Image"	0
		    SF-DRAWABLE   "Drawable"	0
                    SF-OPTION     "mode"        '(_"color" _"gradient" _"texture")
		    SF-COLOR      "Color"       '(255 222 222)
                    SF-GRADIENT   "Gradient"    "Pastels"
                    SF-PATTERN    "Pattern"     "Pink Marble"
		    SF-ADJUSTMENT "bold&blur"   '(1 1 10 1 2 0 0)
		    SF-ADJUSTMENT "bright"      '(40 0 127 1 2 0 0)
		    SF-ADJUSTMENT "shadow"	'(5 1 10 1 2 0 0)
                    SF-TOGGLE     "use original color?"		FALSE
		    SF-ADJUSTMENT "original color threshold"	'(15 0 255 1 2 0 0)
                    SF-TOGGLE     "flatten?"          FALSE
)
