def position_and_define_boundaries(self):
        """Position objs, defining splash screen boundaries.

        The boundaries are only defined if they were not
        defined before or if, after positioning the objects,
        the resulting area is different than in the previous
        time the boundaries were defined.

        In other words, we only (re)define the boundaries
        when absolutely needed.
        """
        ### create custom list representing objects
        ### inside a header and use it to reference
        ### and position objects that should be inside
        ### it

        header = List2D()

        ## append the app icon to the header
        header.append(self.app_icon)

        ## position the title label relative to header
        ## and append it too

        self.title_label.rect.bottomleft = self.app_icon.rect.move(5, 0).bottomright

        header.append(self.title_label)

        ## do the same with the kind and subheading labels

        self.kind_label.rect.bottomleft = self.title_label.rect.move(0, 8).topleft

        header.append(self.kind_label)

        self.subheading_label.rect.midtop = header.rect.midbottom

        header.append(self.subheading_label)

        ## position the release level label relative to
        ## the kind label and also append it to the header

        self.release_level_label.rect.midleft = self.kind_label.rect.move(
            10, 0
        ).midright

        header.append(self.release_level_label)

        ## position the "what's new?" object relative to the title lable and
        ## append it to the header

        self.whats_new_obj.rect.midleft = self.title_label.rect.move(10, 0).midright
        header.append(self.whats_new_obj)

        ### create custom list representing objects
        ### inside the splash screen body and use it to
        ### reference and position objects that should be
        ### inside it

        body = List2D()

        ## append the animation objects
        body.extend(self.animation_objects)

        ##

        file_related_objs = List2D(self.action_objs + self.recent_file_objs)

        if self.recent_file_objs:

            self.recent_file_objs.rect.topleft = self.action_objs.rect.move(
                0, 10
            ).bottomleft

        file_related_objs.rect.topleft = body.rect.move(20, 0).topright

        body.extend(file_related_objs)

        ##
        self.project_link_objs.rect.topleft = body.rect.move(20, 0).topright

        body.extend(self.project_link_objs)

        ### position header, license declaration and
        ### powered link objects relative to body

        header.rect.midbottom = body.rect.move(0, -20).midtop

        self.license_declaration.rect.topright = body.rect.move(-30, 30).midbottom

        self.powered_link_objs.rect.topleft = body.rect.move(30, 20).midbottom

        ### reference all objects in the header and body
        ### and also the license declaration and powered
        ### link objects list in a single special list,
        ### stored both locally and in its own attribute

        all_objs = self.all_objs = List2D(
            header + body + [self.license_declaration] + self.powered_link_objs
        )

        ### create and store a surface representing the
        ### splash screen, which is 30 pixels larger
        ### both horizontally and vertically

        self.image = render_rect(*all_objs.rect.inflate(20, 40).size, SPLASH_BG)

        ### draw a depth finish around the image
        draw_depth_finish(self.image)

        ### obtain a rect for the surface
        self.rect = self.image.get_rect()

        ### update the url_label's max_width
        self.url_label.max_width = self.rect.width - 10

        ### create and store a custom list wherein to
        ### store buttons; the list must be store both
        ### in an attribute and in local variable
        buttons = self.buttons = List2D()

        ### now iterate over all objects, storing those
        ### which work as buttons in the corresponding
        ### list, that is, those which have specific
        ### attributes

        for obj in all_objs:

            if any(
                hasattr(obj, attr) for attr in ("on_mouse_click", "on_mouse_release")
            ):
                buttons.append(obj)

        ### define surfaces with solid colors to represent
        ### the shadows at the bottom and right of the
        ### splash screen

        ## define the width and height of the shadows

        lower_shadow_width, right_shadow_height = self.rect.size

        right_shadow_width = lower_shadow_height = SHADOW_THICKNESS

        ## create the lower shadow

        self.lower_shadow = Object2D.from_surface(
            surface=render_rect(
                lower_shadow_width,
                lower_shadow_height,
                color=SPLASH_SHADOW_COLOR,
            ),
        )

        ## create the right shadow

        self.right_shadow = Object2D.from_surface(
            surface=render_rect(
                right_shadow_width,
                right_shadow_height,
                color=SPLASH_SHADOW_COLOR,
            ),
        )

        ### center the splashscreen
        self.center_splashscreen()
Position objs, defining splash screen boundaries.

        The boundaries are only defined if they were not
        defined before or if, after positioning the objects,
        the resulting area is different than in the previous
        time the boundaries were defined.

        In other words, we only (re)define the boundaries
        when absolutely needed.
        
nodezator/splashscreen/main.py