Merge branch 'master' into blender2.8
authorBastien Montagne <montagne29@wanadoo.fr>
Sat, 11 Aug 2018 13:39:47 +0000 (15:39 +0200)
committerBastien Montagne <montagne29@wanadoo.fr>
Sat, 11 Aug 2018 13:39:47 +0000 (15:39 +0200)
1  2 
build_files/cmake/platform/platform_apple.cmake
release/scripts/startup/bl_ui/properties_data_modifier.py

index 2cb9e07add9421a06f6e33eaf40f88e49451ff28,faed0cf25fc48c0cd0c9fbc0a4d58fb40f222bd0..047b1fa3b5b9212633e4db52bd17184f3a3a6726
@@@ -23,8 -23,6 +23,8 @@@
  
  # Libraries configuration for Apple.
  
 +set(MACOSX_DEPLOYMENT_TARGET "10.9")
 +
  macro(find_package_wrapper)
  # do nothing, just satisfy the macro
  endmacro()
@@@ -45,7 -43,7 +45,7 @@@ if(WITH_OPENAL
        find_package(OpenAL)
        if(OPENAL_FOUND)
                set(WITH_OPENAL ON)
 -              set(OPENAL_INCLUDE_DIR "${LIBDIR}/openal/include")
 +              set(OPENAL_INCLUDE_DIR "${LIBDIR}/openal/include/AL")
        else()
                set(WITH_OPENAL OFF)
        endif()
@@@ -81,10 -79,10 +81,10 @@@ if(WITH_JACK
  endif()
  
  if(WITH_CODEC_SNDFILE)
 -      set(SNDFILE ${LIBDIR}/sndfile)
 -      set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include)
 -      set(SNDFILE_LIBRARIES sndfile FLAC ogg vorbis vorbisenc)
 -      set(SNDFILE_LIBPATH ${SNDFILE}/lib ${LIBDIR}/ffmpeg/lib)  # TODO, deprecate
 +      set(LIBSNDFILE ${LIBDIR}/sndfile)
 +      set(LIBSNDFILE_INCLUDE_DIRS ${LIBSNDFILE}/include)
 +      set(LIBSNDFILE_LIBRARIES sndfile FLAC ogg vorbis vorbisenc)
 +      set(LIBSNDFILE_LIBPATH ${LIBSNDFILE}/lib ${LIBDIR}/ffmpeg/lib)  # TODO, deprecate
  endif()
  
  if(WITH_PYTHON)
@@@ -161,7 -159,10 +161,10 @@@ if(WITH_CODEC_FFMPEG
        set(FFMPEG_LIBRARIES
                avcodec avdevice avformat avutil
                mp3lame swscale x264 xvidcore theora theoradec theoraenc vorbis vorbisenc vorbisfile ogg
-       )
+               )
+             # commenting out until libs are updated on svn. schroedinger and orc
+             # will be removed then
+             # set(FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES} vpx webp swresample)
        set(FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES} schroedinger orc vpx webp swresample)
        set(FFMPEG_LIBPATH ${FFMPEG}/lib)
  endif()
@@@ -171,6 -172,8 +174,8 @@@ if(WITH_IMAGE_OPENJPEG OR WITH_CODEC_FF
        set(OPENJPEG ${LIBDIR}/openjpeg)
        set(WITH_SYSTEM_OPENJPEG ON)
        set(OPENJPEG_INCLUDE_DIRS ${OPENJPEG}/include)
+       # same as with ffmpeg libs, update when svn are updated
+       #set(OPENJPEG_LIBRARIES ${OPENJPEG}/lib/libopenjp2.a)
        set(OPENJPEG_LIBRARIES ${OPENJPEG}/lib/libopenjpeg.a)
  endif()
  
index 996a93ddac45b8d855c7e461eeac5a7975487bed,1a80a160ea5b488b9aa05c93f4f0a6804068d2f8..93e789bbd192e9f8277ca3b1f269a0a69b531c08
@@@ -32,11 -32,6 +32,11 @@@ class ModifierButtonsPanel
  class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
      bl_label = "Modifiers"
  
 +    @classmethod
 +    def poll(cls, context):
 +        ob = context.object
 +        return ob and ob.type != 'GPENCIL'
 +
      def draw(self, context):
          layout = self.layout
  
          col.prop(md, "use_only_vertices")
          col.prop(md, "use_clamp_overlap")
          col.prop(md, "loop_slide")
 +        col.prop(md, "mark_seam")
 +        col.prop(md, "mark_sharp")
  
          layout.label(text="Limit Method:")
          layout.row().prop(md, "limit_method", expand=True)
          layout.label(text="Width Method:")
          layout.row().prop(md, "offset_type", expand=True)
  
 +        layout.label(text="Normal Mode")
 +        layout.row().prop(md, "hnmode", expand=True)
 +        layout.prop(md, "hn_strength")
 +        layout.prop(md, "set_wn_strength")
 +
 +
      def BOOLEAN(self, layout, ob, md):
          split = layout.split()
  
              row.prop(md, "delimit")
              layout_info = layout
  
 -        layout_info.label(text=iface_("Face Count: {:,}".format(md.face_count)),
 -                          translate=False)
 +        layout_info.label(
 +            text=iface_("Face Count: {:,}".format(md.face_count)),
 +            translate=False,
 +        )
  
      def DISPLACE(self, layout, ob, md):
          has_texture = (md.texture is not None)
              col.prop(md, "texture_coords_object", text="")
          elif md.texture_coords == 'UV' and ob.type == 'MESH':
              col.label(text="UV Map:")
 -            col.prop_search(md, "uv_layer", ob.data, "uv_textures", text="")
 +            col.prop_search(md, "uv_layer", ob.data, "uv_layers", text="")
  
          layout.separator()
  
          sub.active = bool(md.vertex_group)
          sub.prop(md, "protect")
          col.label(text="Particle UV")
 -        col.prop_search(md, "particle_uv", ob.data, "uv_textures", text="")
 +        col.prop_search(md, "particle_uv", ob.data, "uv_layers", text="")
  
          col = split.column()
          col.prop(md, "use_edge_cut")
          row.prop(md, "particle_amount", text="Amount")
          row.prop(md, "particle_offset", text="Offset")
  
+         row = layout.row(align=True)
+         row.prop(md, "axis", expand=True)
          layout.separator()
  
          layout.prop(md, "use_path", text="Create Along Paths")
  
-         split = layout.split()
-         split.active = md.use_path
-         col = split.column()
-         col.row().prop(md, "axis", expand=True)
+         col = layout.column()
+         col.active = md.use_path
          col.prop(md, "use_preserve_shape")
  
-         col = split.column()
-         col2 = col.column(align=True)
-         col2.prop(md, "position", slider=True)
-         col2.prop(md, "random_position", text="Random", slider=True)
-         col2 = col.column(align=True)
-         col2.prop(md, "rotation", slider=True)
-         col2.prop(md, "random_rotation", text="Random", slider=True)
+         row = col.row(align=True)
+         row.prop(md, "position", slider=True)
+         row.prop(md, "random_position", text="Random", slider=True)
+         row = col.row(align=True)
+         row.prop(md, "rotation", slider=True)
+         row.prop(md, "random_rotation", text="Random", slider=True)
+         layout.separator()
  
          col = layout.column()
          col.prop_search(md, "index_layer_name", ob.data, "vertex_colors", text="Index Layer")
          col = split.column()
  
          scene = context.scene
 -        engine = scene.render.engine
 +        engine = context.engine
          show_adaptive_options = (
              engine == 'CYCLES' and md == ob.modifiers[-1] and
              scene.cycles.feature_set == 'EXPERIMENTAL'
  
      def UV_PROJECT(self, layout, ob, md):
          split = layout.split()
 -
 -        col = split.column()
 -        col.label(text="Image:")
 -        col.prop(md, "image", text="")
 -
          col = split.column()
 -        col.label(text="UV Map:")
 -        col.prop_search(md, "uv_layer", ob.data, "uv_textures", text="")
 +        col.prop_search(md, "uv_layer", ob.data, "uv_layers")
 +        col.separator()
  
 -        split = layout.split()
 -        col = split.column()
 -        col.prop(md, "use_image_override")
          col.prop(md, "projector_count", text="Projectors")
          for proj in md.projectors:
              col.prop(proj, "object", text="")
          if md.texture_coords == 'OBJECT':
              layout.prop(md, "texture_coords_object", text="Object")
          elif md.texture_coords == 'UV' and ob.type == 'MESH':
 -            layout.prop_search(md, "uv_layer", ob.data, "uv_textures")
 +            layout.prop_search(md, "uv_layer", ob.data, "uv_layers")
  
      def WAVE(self, layout, ob, md):
          split = layout.split()
          col.template_ID(md, "texture", new="texture.new")
          layout.prop(md, "texture_coords")
          if md.texture_coords == 'UV' and ob.type == 'MESH':
 -            layout.prop_search(md, "uv_layer", ob.data, "uv_textures")
 +            layout.prop_search(md, "uv_layer", ob.data, "uv_layers")
          elif md.texture_coords == 'OBJECT':
              layout.prop(md, "texture_coords_object")
  
                  if md.mask_tex_mapping == 'OBJECT':
                      layout.prop(md, "mask_tex_map_object", text="Object")
                  elif md.mask_tex_mapping == 'UV' and ob.type == 'MESH':
 -                    layout.prop_search(md, "mask_tex_uv_layer", ob.data, "uv_textures")
 +                    layout.prop_search(md, "mask_tex_uv_layer", ob.data, "uv_layers")
  
      def VERTEX_WEIGHT_EDIT(self, layout, ob, md):
          split = layout.split()
  
          col = split.column()
          col.label(text="UV Map:")
 -        col.prop_search(md, "uv_layer", ob.data, "uv_textures", text="")
 +        col.prop_search(md, "uv_layer", ob.data, "uv_layers", text="")
  
      def WIREFRAME(self, layout, ob, md):
          has_vgroup = bool(md.vertex_group)
          if md.rest_source == 'BIND':
              layout.operator("object.correctivesmooth_bind", text="Unbind" if is_bind else "Bind")
  
 +    def WEIGHTED_NORMAL(self, layout, ob, md):
 +        layout.label("Weighting Mode:")
 +        split = layout.split(align=True)
 +        col = split.column(align=True)
 +        col.prop(md, "mode", text="")
 +        col.prop(md, "weight", text="Weight")
 +        col.prop(md, "keep_sharp")
 +
 +        col = split.column(align=True)
 +        row = col.row(align=True)
 +        row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
 +        row.active = bool(md.vertex_group)
 +        row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
 +        col.prop(md, "thresh", text="Threshold")
 +        col.prop(md, "face_influence")
 +
 +
 +class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
 +    bl_label = "Modifiers"
 +
 +    @classmethod
 +    def poll(cls, context):
 +        ob = context.object
 +        return ob and ob.type == 'GPENCIL'
 +
 +    def draw(self, context):
 +        layout = self.layout
 +
 +        ob = context.object
 +
 +        layout.operator_menu_enum("object.gpencil_modifier_add", "type")
 +
 +        for md in ob.grease_pencil_modifiers:
 +            box = layout.template_greasepencil_modifier(md)
 +            if box:
 +                # match enum type to our functions, avoids a lookup table.
 +                getattr(self, md.type)(box, ob, md)
 +
 +    # the mt.type enum is (ab)used for a lookup on function names
 +    # ...to avoid lengthy if statements
 +    # so each type must have a function here.
 +
 +    def GP_NOISE(self, layout, ob, md):
 +        gpd = ob.data
 +        split = layout.split()
 +
 +        col = split.column()
 +        row = col.row(align=True)
 +        row.prop(md, "factor")
 +        row.prop(md, "random", text="", icon="TIME", toggle=True)
 +        row = col.row()
 +        row.enabled = md.random
 +        row.prop(md, "step")
 +        col.prop(md, "full_stroke")
 +        col.prop(md, "move_extreme")
 +
 +        col = split.column()
 +        col.label("Layer:")
 +        row = col.row(align=True)
 +        row.prop_search(md, "layer", gpd, "layers", text="", icon='GREASEPENCIL')
 +        row.prop(md, "invert_layers", text="", icon="ARROW_LEFTRIGHT")
 +
 +        col.label("Vertex Group:")
 +        row = col.row(align=True)
 +        row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
 +        row.prop(md, "invert_vertex", text="", icon="ARROW_LEFTRIGHT")
 +
 +        row = col.row(align=True)
 +        row.prop(md, "pass_index", text="Pass")
 +        row.prop(md, "invert_pass", text="", icon="ARROW_LEFTRIGHT")
 +
 +        row = layout.row(align=True)
 +        row.label("Affect:")
 +        row = layout.row(align=True)
 +        row.prop(md, "affect_position", text="Position", icon='MESH_DATA', toggle=True)
 +        row.prop(md, "affect_strength", text="Strength", icon='COLOR', toggle=True)
 +        row.prop(md, "affect_thickness", text="Thickness", icon='LINE_DATA', toggle=True)
 +        row.prop(md, "affect_uv", text="UV", icon='MOD_UVPROJECT', toggle=True)
 +
 +    def GP_SMOOTH(self, layout, ob, md):
 +        gpd = ob.data
 +        row = layout.row(align=False)
 +        row.prop(md, "factor")
 +        row.prop(md, "step")
 +
 +        split = layout.split()
 +        col = split.column()
 +        col.label("Layer:")
 +        row = col.row(align=True)
 +        row.prop_search(md, "layer", gpd, "layers", text="", icon='GREASEPENCIL')
 +        row.prop(md, "invert_layers", text="", icon="ARROW_LEFTRIGHT")
 +
 +        col = split.column()
 +        col.label("Vertex Group:")
 +        row = col.row(align=True)
 +        row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
 +        row.prop(md, "invert_vertex", text="", icon="ARROW_LEFTRIGHT")
 +
 +        row = col.row(align=True)
 +        row.prop(md, "pass_index", text="Pass")
 +        row.prop(md, "invert_pass", text="", icon="ARROW_LEFTRIGHT")
 +
 +        row = layout.row(align=True)
 +        row.label("Affect:")
 +        row = layout.row(align=True)
 +        row.prop(md, "affect_position", text="Position", icon='MESH_DATA', toggle=True)
 +        row.prop(md, "affect_strength", text="Strength", icon='COLOR', toggle=True)
 +        row.prop(md, "affect_thickness", text="Thickness", icon='LINE_DATA', toggle=True)
 +        row.prop(md, "affect_uv", text="UV", icon='MOD_UVPROJECT', toggle=True)
 +
 +    def GP_SUBDIV(self, layout, ob, md):
 +        gpd = ob.data
 +        split = layout.split()
 +
 +        col = split.column()
 +        row = col.row(align=True)
 +        row.prop(md, "level")
 +        row.prop(md, "simple", text="", icon="PARTICLE_POINT")
 +        row = col.row(align=True)
 +        row.prop(md, "pass_index", text="Pass")
 +        row.prop(md, "invert_pass", text="", icon="ARROW_LEFTRIGHT")
 +
 +        col = split.column()
 +        col.label("Layer:")
 +        row = col.row(align=True)
 +        row.prop_search(md, "layer", gpd, "layers", text="", icon='GREASEPENCIL')
 +        row.prop(md, "invert_layers", text="", icon="ARROW_LEFTRIGHT")
 +
 +    def GP_SIMPLIFY(self, layout, ob, md):
 +        gpd = ob.data
 +
 +        row = layout.row()
 +        row.prop(md, "mode")
 +
 +        split = layout.split()
 +
 +        col = split.column()
 +        col.label("Settings:")
 +        row = col.row(align=True)
 +        row.enabled = md.mode == 'FIXED'
 +        row.prop(md, "step")
 +
 +        row = col.row(align=True)
 +        row.enabled = not md.mode == 'FIXED'
 +        row.prop(md, "factor")
 +
 +        col = split.column()
 +        col.label("Layer:")
 +        row = col.row(align=True)
 +        row.prop_search(md, "layer", gpd, "layers", text="", icon='GREASEPENCIL')
 +
 +        row = col.row(align=True)
 +        row.prop(md, "pass_index", text="Pass")
 +        row.prop(md, "invert_pass", text="", icon="ARROW_LEFTRIGHT")
 +
 +    def GP_THICK(self, layout, ob, md):
 +        gpd = ob.data
 +        split = layout.split()
 +
 +        col = split.column()
 +        row = col.row(align=True)
 +        row.prop(md, "thickness")
 +        row = col.row(align=True)
 +        row.prop(md, "pass_index", text="Pass")
 +        row.prop(md, "invert_pass", text="", icon="ARROW_LEFTRIGHT")
 +
 +        col.prop(md, "normalize_thickness")
 +
 +        col = split.column()
 +        col.label("Layer:")
 +        row = col.row(align=True)
 +        row.prop_search(md, "layer", gpd, "layers", text="", icon='GREASEPENCIL')
 +        row.prop(md, "invert_layers", text="", icon="ARROW_LEFTRIGHT")
 +
 +        col.label("Vertex Group:")
 +        row = col.row(align=True)
 +        row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
 +        row.prop(md, "invert_vertex", text="", icon="ARROW_LEFTRIGHT")
 +
 +        if not md.normalize_thickness:
 +            split = layout.split()
 +            col = split.column()
 +            col.prop(md, "use_custom_curve")
 +
 +            if md.use_custom_curve:
 +                col.template_curve_mapping(md, "curve")
 +
 +    def GP_TINT(self, layout, ob, md):
 +        gpd = ob.data
 +        split = layout.split()
 +
 +        col = split.column()
 +        col.prop(md, "color")
 +        col.prop(md, "factor")
 +
 +        col = split.column()
 +        col.label("Layer:")
 +        row = col.row(align=True)
 +        row.prop_search(md, "layer", gpd, "layers", text="", icon='GREASEPENCIL')
 +        row.prop(md, "invert_layers", text="", icon="ARROW_LEFTRIGHT")
 +        row = col.row(align=True)
 +        row.prop(md, "pass_index", text="Pass")
 +        row.prop(md, "invert_pass", text="", icon="ARROW_LEFTRIGHT")
 +
 +        row = layout.row()
 +        row.prop(md, "create_materials")
 +        row.prop(md, "modify_color")
 +        
 +
 +    def GP_COLOR(self, layout, ob, md):
 +        gpd = ob.data
 +        split = layout.split()
 +
 +        col = split.column()
 +        col.label("Color:")
 +        col.prop(md, "hue", text="H")
 +        col.prop(md, "saturation", text="S")
 +        col.prop(md, "value", text="V")
 +
 +        col = split.column()
 +        col.label("Layer:")
 +        row = col.row(align=True)
 +        row.prop_search(md, "layer", gpd, "layers", text="", icon='GREASEPENCIL')
 +        row.prop(md, "invert_layers", text="", icon="ARROW_LEFTRIGHT")
 +        row = col.row(align=True)
 +        row.prop(md, "pass_index", text="Pass")
 +        row.prop(md, "invert_pass", text="", icon="ARROW_LEFTRIGHT")
 +
 +        row = layout.row()
 +        row.prop(md, "create_materials")
 +        row.prop(md, "modify_color")
 +
 +    def GP_OPACITY(self, layout, ob, md):
 +        gpd = ob.data
 +        split = layout.split()
 +
 +        col = split.column()
 +        col.label("Opacity:")
 +        col.prop(md, "factor")
 +
 +        col = split.column()
 +        col.label("Layer:")
 +        row = col.row(align=True)
 +        row.prop_search(md, "layer", gpd, "layers", text="", icon='GREASEPENCIL')
 +        row.prop(md, "invert_layers", text="", icon="ARROW_LEFTRIGHT")
 +
 +        col.label("Vertex Group:")
 +        row = col.row(align=True)
 +        row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
 +        row.prop(md, "invert_vertex", text="", icon="ARROW_LEFTRIGHT")
 +
 +        row = col.row(align=True)
 +        row.prop(md, "pass_index", text="Pass")
 +        row.prop(md, "invert_pass", text="", icon="ARROW_LEFTRIGHT")
 +        
 +        row = layout.row()
 +        row.prop(md, "create_materials")
 +        row.prop(md, "modify_color")
 +
 +    def GP_INSTANCE(self, layout, ob, md):
 +        gpd = ob.data
 +
 +        col = layout.column()
 +        col.prop(md, "count")
 +        col.prop(md, "use_make_objects")
 +
 +        split = layout.split()
 +        col = split.column()
 +        col.label("Offset:")
 +        col.prop(md, "offset", text="")
 +
 +        col = split.column()
 +        col.label("Shift:")
 +        col.prop(md, "shift", text="")
 +        row = col.row(align=True)
 +        row.prop(md, "lock_axis", expand=True)
 +
 +        split = layout.split()
 +        col = split.column()
 +        col.label("Rotation:")
 +        col.prop(md, "rotation", text="")
 +        col.separator()
 +        row = col.row(align=True)
 +        row.prop(md, "random_rot", text="", icon="TIME", toggle=True)
 +        row.prop(md, "rot_factor", text="")
 +
 +        col = split.column()
 +        col.label("Scale:")
 +        col.prop(md, "scale", text="")
 +        col.separator()
 +        row = col.row(align=True)
 +        row.prop(md, "random_scale", text="", icon="TIME", toggle=True)
 +        row.prop(md, "scale_factor", text="")
 +
 +        split = layout.split()
 +        col = split.column()
 +        col.label("Layer:")
 +        row = col.row(align=True)
 +        row.prop_search(md, "layer", gpd, "layers", text="", icon='GREASEPENCIL')
 +        row.prop(md, "invert_layers", text="", icon="ARROW_LEFTRIGHT")
 +        row = col.row(align=True)
 +        row.prop(md, "pass_index", text="Pass")
 +        row.prop(md, "invert_pass", text="", icon="ARROW_LEFTRIGHT")
 +
 +    def GP_BUILD(self, layout, ob, md):
 +        gpd = ob.data
 +
 +        split = layout.split()
 +
 +        col = split.column()
 +        col.prop(md, "mode")
 +        if md.mode == 'CONCURRENT':
 +            col.prop(md, "concurrent_time_alignment")
 +        else:
 +            col.separator()  # For spacing
 +            col.separator()
 +        col.separator()
 +
 +        col.prop(md, "transition")
 +        sub = col.column(align=True)
 +        sub.prop(md, "start_delay")
 +        sub.prop(md, "length")
 +
 +        col = split.column(align=True)
 +        col.prop(md, "use_restrict_frame_range")
 +        sub = col.column(align=True)
 +        sub.active = md.use_restrict_frame_range
 +        sub.prop(md, "frame_start", text="Start")
 +        sub.prop(md, "frame_end", text="End")
 +        col.separator()
 +
 +        col.label("Layer:")
 +        row = col.row(align=True)
 +        row.prop_search(md, "layer", gpd, "layers", text="", icon='GREASEPENCIL')
 +        row.prop(md, "invert_layers", text="", icon="ARROW_LEFTRIGHT")
 +
 +    def GP_LATTICE(self, layout, ob, md):
 +        gpd = ob.data
 +        split = layout.split()
 +
 +        col = split.column()
 +        col.label(text="Object:")
 +        col.prop(md, "object", text="")
 +
 +        col = split.column()
 +        col.label("Layer:")
 +        row = col.row(align=True)
 +        row.prop_search(md, "layer", gpd, "layers", text="", icon='GREASEPENCIL')
 +        row.prop(md, "invert_layers", text="", icon="ARROW_LEFTRIGHT")
 +
 +        col.label("Vertex Group:")
 +        row = col.row(align=True)
 +        row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
 +        row.prop(md, "invert_vertex", text="", icon="ARROW_LEFTRIGHT")
 +
 +        row = col.row(align=True)
 +        row.prop(md, "pass_index", text="Pass")
 +        row.prop(md, "invert_pass", text="", icon="ARROW_LEFTRIGHT")
 +
 +        layout.separator()
 +        layout.prop(md, "strength", slider=True)
 +
 +    def GP_MIRROR(self, layout, ob, md):
 +        gpd = ob.data
 +
 +        row = layout.row(align=True)
 +        row.prop(md, "x_axis")
 +        row.prop(md, "y_axis")
 +        row.prop(md, "z_axis")
 +
 +        # GPXX: Not implemented yet
 +        # layout.separator()
 +        # layout.prop(md, "clip")
 +
 +        layout.label("Layer:")
 +        row = layout.row(align=True)
 +        row.prop_search(md, "layer", gpd, "layers", text="", icon='GREASEPENCIL')
 +        row.prop(md, "invert_layers", text="", icon="ARROW_LEFTRIGHT")
 +
 +        row = layout.row(align=True)
 +        row.prop(md, "pass_index", text="Pass")
 +        row.prop(md, "invert_pass", text="", icon="ARROW_LEFTRIGHT")
 +
 +        layout.label(text="Object:")
 +        layout.prop(md, "object", text="")
 +
 +    def GP_HOOK(self, layout, ob, md):
 +        gpd = ob.data
 +        split = layout.split()
 +
 +        col = split.column()
 +        col.label(text="Object:")
 +        col.prop(md, "object", text="")
 +        if md.object and md.object.type == 'ARMATURE':
 +            col.label(text="Bone:")
 +            col.prop_search(md, "subtarget", md.object.data, "bones", text="")
 +
 +        col = split.column()
 +        col.label("Layer:")
 +        row = col.row(align=True)
 +        row.prop_search(md, "layer", gpd, "layers", text="", icon='GREASEPENCIL')
 +        row.prop(md, "invert_layers", text="", icon="ARROW_LEFTRIGHT")
 +
 +        col.label("Vertex Group:")
 +        row = col.row(align=True)
 +        row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
 +        row.prop(md, "invert_vertex", text="", icon="ARROW_LEFTRIGHT")
 +
 +        row = col.row(align=True)
 +        row.prop(md, "pass_index", text="Pass")
 +        row.prop(md, "invert_pass", text="", icon="ARROW_LEFTRIGHT")
 +
 +        use_falloff = (md.falloff_type != 'NONE')
 +        split = layout.split()
 +
 +        layout.separator()
 +
 +        row = layout.row(align=True)
 +        if use_falloff:
 +            row.prop(md, "falloff_radius")
 +        row.prop(md, "strength", slider=True)
 +        layout.prop(md, "falloff_type")
 +
 +        col = layout.column()
 +        if use_falloff:
 +            if md.falloff_type == 'CURVE':
 +                col.template_curve_mapping(md, "falloff_curve")
 +
 +        split = layout.split()
 +
 +        col = split.column()
 +        col.prop(md, "use_falloff_uniform")
 +
 +    def GP_OFFSET(self, layout, ob, md):
 +        gpd = ob.data
 +        split = layout.split()
 +
 +        col = split.column()
 +        col.prop(md, "location")
 +        col.prop(md, "scale")
 +
 +        col = split.column()
 +        col.prop(md, "rotation")
 +
 +        col.label("Layer:")
 +        row = col.row(align=True)
 +        row.prop_search(md, "layer", gpd, "layers", text="", icon='GREASEPENCIL')
 +        row.prop(md, "invert_layers", text="", icon="ARROW_LEFTRIGHT")
 +
 +        col.label("Vertex Group:")
 +        row = col.row(align=True)
 +        row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
 +        row.prop(md, "invert_vertex", text="", icon="ARROW_LEFTRIGHT")
 +
 +        row = col.row(align=True)
 +        row.prop(md, "pass_index", text="Pass")
 +        row.prop(md, "invert_pass", text="", icon="ARROW_LEFTRIGHT")
 +
  
  classes = (
      DATA_PT_modifiers,
 +    DATA_PT_gpencil_modifiers,
  )
  
  if __name__ == "__main__":  # only for live edit.