Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
My first python plugin review
#16
The idea of context_push()/Context_pop() is that they bracket the whole code (like the undo_group thing) , so that once you have set it up your code can alter the context without having to worry about it.

Beyond this it becomes a matter of style. Personally, I loathe if/else, because this tends to create code duplicates(*) so you have to maintain two or more branches in parallel. So my way of writing this:

Code:
       if(background_type == 1): # foreground color
           pdb.gimp_edit_bucket_fill(background, BUCKET_FILL_FG, LAYER_MODE_NORMAL_LEGACY, 100, 0, False, 1, 1)
       elif(background_type == 2): # background color
           pdb.gimp_edit_bucket_fill(background, BUCKET_FILL_BG, LAYER_MODE_NORMAL_LEGACY, 100, 0, False, 1, 1)
       elif(background_type == 3): # other color
           pdb.gimp_context_push()
           pdb.gimp_context_set_background(background_color) # set new background color
           pdb.gimp_edit_bucket_fill(background, BUCKET_FILL_BG, LAYER_MODE_NORMAL_LEGACY, 100, 0, False, 1, 1) # fill background with new color
           pdb.gimp_context_pop()

would be:

Code:
       gimp.context_push()

       # most of your code goes here

       color=[gimp.get_foreground(),gimp.get_background(),background_color][background_type-1]
        pdb.gimp_edit_bucket_fill(color, BUCKET_FILL_BG, LAYER_MODE_NORMAL_LEGACY, 100, 0, False, 1, 1) # fill background with new color

       # some more of your code goes here

       gimp.context_pop()

Then you discover that there are better ways to fill the layer, so you need only one change
Code:
       gimp.context_push()

       # most of your code goes here

        color=[gimp.get_foreground(),gimp.get_background(),background_color][background_type-1]
       gimp.set_foreground(color)
       layer.fill(FILL_FOREGROUND)

       # some more of your code goes here

       gimp.context_pop()

(I tend to use the object methods instead of the pdb.* procedures when they exists, this make the code easier to read. To find what they are, do a dir(gimp), dir(image, or dir(layer) in the python console (after initializing image and layer of course) . The mapping are usually quite obvious.

(*) this is called the DRY principle: "don't repeat yourself". The opposite is of course the WET principle: "We enjoy typing"
Reply


Messages In This Thread
My first python plugin review - by origamifreak2 - 12-28-2024, 02:59 AM
RE: My first python plugin review - by Ofnuts - 12-28-2024, 09:08 AM
RE: My first python plugin review - by Ofnuts - 12-29-2024, 09:18 AM
RE: My first python plugin review - by gasMask - 12-29-2024, 12:22 AM
RE: My first python plugin review - by Ofnuts - 12-31-2024, 09:56 PM
RE: My first python plugin review - by Ofnuts - 01-01-2025, 09:26 AM
RE: My first python plugin review - by Ofnuts - 01-06-2025, 09:03 AM
RE: My first python plugin review - by Ofnuts - Yesterday, 09:18 AM

Forum Jump: