gdkar / pyglet

Automatically exported from code.google.com/p/pyglet
BSD 3-Clause "New" or "Revised" License
0 stars 0 forks source link

insert_element and delete_text working problem #631

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
While using pyglet's document, layout, etc. I came across 2 issues:
1) using insert_element function doesn't work as expected until 
layout.begin_update and layout.end_update functions are used around it
2) deleting element from document doesn't reset its internal variable 
_position, which raises an assertionError when inserted repeatedly

Both issues is possible to simulate in the attached code. First simply by 
commenting layout.begin_update and layout.end_update functions from around the 
insert_element function (for ex. rows 16 and 27). Second by commenting the row 
22 (element._position = None).

Deleting row 22 in attached file causes traceback:
Traceback (element._position isn't reset to None manually):
Traceback (most recent call last):
  File "./imageTest3.py", line 58, in <module>
    pyglet.app.run()
  File "/usr/local/lib/python2.7/dist-packages/pyglet/app/__init__.py", line 264, in run
    EventLoop().run()
  File "/usr/local/lib/python2.7/dist-packages/pyglet/app/xlib.py", line 82, in run
    window.dispatch_platform_event(e)
  File "/usr/local/lib/python2.7/dist-packages/pyglet/window/xlib/__init__.py", line 1169, in dispatch_platform_event
    event_handler(e)
  File "/usr/local/lib/python2.7/dist-packages/pyglet/window/xlib/__init__.py", line 1333, in _event_key
    self.dispatch_event('on_key_press', symbol, modifiers)
  File "/usr/local/lib/python2.7/dist-packages/pyglet/window/__init__.py", line 1219, in dispatch_event
    EventDispatcher.dispatch_event(self, *args)
  File "/usr/local/lib/python2.7/dist-packages/pyglet/event.py", line 340, in dispatch_event
    if handler(*args):
  File "./imageTest3.py", line 25, in on_key_press
    document.insert_element(len(document.text), element)
  File "/usr/local/lib/python2.7/dist-packages/pyglet/text/document.py", line 471, in insert_element
    'Element is already in a document.'
AssertionError: Element is already in a document.

Python
------------------------------------------------------------------------------
sys.version: 2.7.3 (default, Sep 26 2012, 21:51:14) 
[GCC 4.7.2]
sys.platform: linux2
os.getcwd(): /home/havel/__BAKALARKA__/gui/install/linux

pyglet
------------------------------------------------------------------------------
pyglet.version: 1.1.4
pyglet.__file__: /usr/local/lib/python2.7/dist-packages/pyglet/__init__.pyc
pyglet.options['debug_trace_depth'] = 1
pyglet.options['font'] = ('gdiplus', 'win32')
pyglet.options['xsync'] = True
pyglet.options['debug_trace_flush'] = True
pyglet.options['debug_win32'] = False
pyglet.options['debug_gl_trace'] = False
pyglet.options['debug_x11'] = False
pyglet.options['shadow_window'] = True
pyglet.options['debug_font'] = False
pyglet.options['debug_media'] = False
pyglet.options['debug_trace'] = False
pyglet.options['debug_lib'] = False
pyglet.options['graphics_vbo'] = True
pyglet.options['vsync'] = None
pyglet.options['debug_trace_args'] = False
pyglet.options['debug_gl'] = True
pyglet.options['debug_graphics_batch'] = False
pyglet.options['audio'] = ('directsound', 'openal', 'alsa', 'silent')
pyglet.options['debug_texture'] = False
pyglet.options['debug_gl_trace_args'] = False

pyglet.window
------------------------------------------------------------------------------
platform: <pyglet.window.xlib.XlibPlatform object at 0x259a090>
display: <pyglet.window.xlib.XlibDisplayDevice object at 0x2784fd0>
screens[0]: XlibScreen(screen=0, x=0, y=0, width=1440, height=900, xinerama=1)
config['double_buffer'] = 1
config['stereo'] = 0
config['buffer_size'] = 24
config['aux_buffers'] = 0
config['sample_buffers'] = 0
config['samples'] = 0
config['red_size'] = 8
config['green_size'] = 8
config['blue_size'] = 8
config['alpha_size'] = 0
config['depth_size'] = 24
config['stencil_size'] = 0
config['accum_red_size'] = 0
config['accum_green_size'] = 0
config['accum_blue_size'] = 0
config['accum_alpha_size'] = 0
context: XlibGLContext()

pyglet.gl.gl_info
------------------------------------------------------------------------------
gl_info.get_version(): 2.1 Mesa 9.0.2
gl_info.get_vendor(): VMware, Inc.
gl_info.get_renderer(): Gallium 0.4 on SVGA3D; build: RELEASE;  
gl_info.get_extensions():
   GL_APPLE_packed_pixels
   GL_APPLE_vertex_array_object
   GL_ARB_ES2_compatibility
   GL_ARB_color_buffer_float
   GL_ARB_copy_buffer
   GL_ARB_debug_output
   GL_ARB_depth_texture
   GL_ARB_draw_buffers
   GL_ARB_draw_elements_base_vertex
   GL_ARB_explicit_attrib_location
   GL_ARB_fragment_coord_conventions
   GL_ARB_fragment_program
   GL_ARB_fragment_program_shadow
   GL_ARB_fragment_shader
   GL_ARB_framebuffer_object
   GL_ARB_framebuffer_sRGB
   GL_ARB_half_float_pixel
   GL_ARB_half_float_vertex
   GL_ARB_invalidate_subdata
   GL_ARB_map_buffer_range
   GL_ARB_multisample
   GL_ARB_multitexture
   GL_ARB_occlusion_query
   GL_ARB_occlusion_query2
   GL_ARB_pixel_buffer_object
   GL_ARB_point_parameters
   GL_ARB_point_sprite
   GL_ARB_provoking_vertex
   GL_ARB_robustness
   GL_ARB_sampler_objects
   GL_ARB_shader_objects
   GL_ARB_shading_language_100
   GL_ARB_shadow
   GL_ARB_sync
   GL_ARB_texture_border_clamp
   GL_ARB_texture_compression
   GL_ARB_texture_cube_map
   GL_ARB_texture_env_add
   GL_ARB_texture_env_combine
   GL_ARB_texture_env_crossbar
   GL_ARB_texture_env_dot3
   GL_ARB_texture_float
   GL_ARB_texture_mirrored_repeat
   GL_ARB_texture_non_power_of_two
   GL_ARB_texture_rectangle
   GL_ARB_texture_storage
   GL_ARB_texture_swizzle
   GL_ARB_transpose_matrix
   GL_ARB_vertex_array_bgra
   GL_ARB_vertex_array_object
   GL_ARB_vertex_buffer_object
   GL_ARB_vertex_program
   GL_ARB_vertex_shader
   GL_ARB_window_pos
   GL_ATI_blend_equation_separate
   GL_ATI_draw_buffers
   GL_ATI_separate_stencil
   GL_ATI_texture_env_combine3
   GL_ATI_texture_float
   GL_EXT_abgr
   GL_EXT_bgra
   GL_EXT_blend_color
   GL_EXT_blend_equation_separate
   GL_EXT_blend_func_separate
   GL_EXT_blend_minmax
   GL_EXT_blend_subtract
   GL_EXT_compiled_vertex_array
   GL_EXT_copy_texture
   GL_EXT_draw_range_elements
   GL_EXT_fog_coord
   GL_EXT_framebuffer_blit
   GL_EXT_framebuffer_multisample
   GL_EXT_framebuffer_object
   GL_EXT_framebuffer_sRGB
   GL_EXT_gpu_program_parameters
   GL_EXT_multi_draw_arrays
   GL_EXT_packed_depth_stencil
   GL_EXT_packed_pixels
   GL_EXT_pixel_buffer_object
   GL_EXT_point_parameters
   GL_EXT_polygon_offset
   GL_EXT_provoking_vertex
   GL_EXT_rescale_normal
   GL_EXT_secondary_color
   GL_EXT_separate_shader_objects
   GL_EXT_separate_specular_color
   GL_EXT_shadow_funcs
   GL_EXT_stencil_two_side
   GL_EXT_stencil_wrap
   GL_EXT_subtexture
   GL_EXT_texture
   GL_EXT_texture3D
   GL_EXT_texture_compression_dxt1
   GL_EXT_texture_compression_s3tc
   GL_EXT_texture_cube_map
   GL_EXT_texture_edge_clamp
   GL_EXT_texture_env_add
   GL_EXT_texture_env_combine
   GL_EXT_texture_env_dot3
   GL_EXT_texture_filter_anisotropic
   GL_EXT_texture_lod_bias
   GL_EXT_texture_object
   GL_EXT_texture_rectangle
   GL_EXT_texture_sRGB
   GL_EXT_texture_sRGB_decode
   GL_EXT_texture_swizzle
   GL_EXT_vertex_array
   GL_EXT_vertex_array_bgra
   GL_IBM_multimode_draw_arrays
   GL_IBM_rasterpos_clip
   GL_IBM_texture_mirrored_repeat
   GL_INGR_blend_func_separate
   GL_MESA_pack_invert
   GL_MESA_window_pos
   GL_NV_blend_square
   GL_NV_fog_distance
   GL_NV_light_max_exponent
   GL_NV_packed_depth_stencil
   GL_NV_primitive_restart
   GL_NV_texgen_reflection
   GL_NV_texture_env_combine4
   GL_NV_texture_rectangle
   GL_OES_EGL_image
   GL_OES_read_format
   GL_S3_s3tc
   GL_SGIS_generate_mipmap
   GL_SGIS_texture_border_clamp
   GL_SGIS_texture_edge_clamp
   GL_SGIS_texture_lod
   GL_SUN_multi_draw_arrays

pyglet.gl.glu_info
------------------------------------------------------------------------------
glu_info.get_version(): 1.3
glu_info.get_extensions():
   GLU_EXT_nurbs_tessellator
   GLU_EXT_object_space_tess

pyglet.gl.glx_info
------------------------------------------------------------------------------
context.is_direct(): 1
glx_info.get_server_vendor(): SGI
glx_info.get_server_version(): 1.4
glx_info.get_server_extensions():
   GLX_ARB_create_context
   GLX_ARB_create_context_profile
   GLX_ARB_multisample
   GLX_EXT_create_context_es2_profile
   GLX_EXT_import_context
   GLX_EXT_texture_from_pixmap
   GLX_EXT_visual_info
   GLX_EXT_visual_rating
   GLX_MESA_copy_sub_buffer
   GLX_OML_swap_method
   GLX_SGIS_multisample
   GLX_SGIX_fbconfig
   GLX_SGIX_pbuffer
   GLX_SGIX_visual_select_group
   GLX_INTEL_swap_event
glx_info.get_client_vendor(): Mesa Project and SGI
glx_info.get_client_version(): 1.4
glx_info.get_client_extensions():
   GLX_ARB_create_context
   GLX_ARB_create_context_profile
   GLX_ARB_create_context_robustness
   GLX_ARB_get_proc_address
   GLX_ARB_multisample
   GLX_EXT_import_context
   GLX_EXT_visual_info
   GLX_EXT_visual_rating
   GLX_EXT_framebuffer_sRGB
   GLX_EXT_create_context_es2_profile
   GLX_MESA_copy_sub_buffer
   GLX_MESA_multithread_makecurrent
   GLX_MESA_swap_control
   GLX_OML_swap_method
   GLX_OML_sync_control
   GLX_SGI_make_current_read
   GLX_SGI_swap_control
   GLX_SGI_video_sync
   GLX_SGIS_multisample
   GLX_SGIX_fbconfig
   GLX_SGIX_pbuffer
   GLX_SGIX_visual_select_group
   GLX_EXT_texture_from_pixmap
   GLX_INTEL_swap_event
glx_info.get_extensions():
   GLX_ARB_create_context
   GLX_ARB_create_context_profile
   GLX_ARB_get_proc_address
   GLX_ARB_multisample
   GLX_EXT_import_context
   GLX_EXT_visual_info
   GLX_EXT_visual_rating
   GLX_EXT_create_context_es2_profile
   GLX_MESA_copy_sub_buffer
   GLX_MESA_multithread_makecurrent
   GLX_MESA_swap_control
   GLX_OML_swap_method
   GLX_SGI_make_current_read
   GLX_SGI_video_sync
   GLX_SGIS_multisample
   GLX_SGIX_fbconfig
   GLX_SGIX_pbuffer
   GLX_SGIX_visual_select_group
   GLX_EXT_texture_from_pixmap
   GLX_INTEL_swap_event

pyglet.media
------------------------------------------------------------------------------
driver: pyglet.media.drivers.openal

pyglet.media.avbin
------------------------------------------------------------------------------
Library: <CDLL 'libavbin.so', handle 2a679e0 at 29dde50>
AVbin version: 7
FFmpeg revision: 13661

pyglet.media.drivers.openal
------------------------------------------------------------------------------
Library: <CDLL 'libopenal.so', handle 29bf700 at 29a9610>
Version: (1, 1)
Extensions:
   ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_DEDICATED ALC_EXT_disconnect ALC_EXT_EFX ALC_EXT_thread_local_context ALC_SOFT_loopback
AL lib: ReleaseALC: 1 device not closed

Original issue reported on code.google.com by ha...@centrum.cz on 7 Mar 2013 at 4:48

Attachments:

GoogleCodeExporter commented 9 years ago
I found another problem concerning insert_element: it raises an attribute 
exception when 2 elements are inserted one after another (without using 
insert_text in between)

It is possible to replicate the issue by commenting the row 28 in the attached 
file imageTest4.py.

Traceback (most recent call last):
  File "./imageTest4.py", line 63, in <module>
    pyglet.app.run()
  File "/usr/local/lib/python2.7/dist-packages/pyglet/app/__init__.py", line 264, in run
    EventLoop().run()
  File "/usr/local/lib/python2.7/dist-packages/pyglet/app/xlib.py", line 82, in run
    window.dispatch_platform_event(e)
  File "/usr/local/lib/python2.7/dist-packages/pyglet/window/xlib/__init__.py", line 1169, in dispatch_platform_event
    event_handler(e)
  File "/usr/local/lib/python2.7/dist-packages/pyglet/window/xlib/__init__.py", line 1333, in _event_key
    self.dispatch_event('on_key_press', symbol, modifiers)
  File "/usr/local/lib/python2.7/dist-packages/pyglet/window/__init__.py", line 1219, in dispatch_event
    EventDispatcher.dispatch_event(self, *args)
  File "/usr/local/lib/python2.7/dist-packages/pyglet/event.py", line 340, in dispatch_event
    if handler(*args):
  File "./imageTest4.py", line 31, in on_key_press
    layout.end_update()
  File "/usr/local/lib/python2.7/dist-packages/pyglet/text/layout.py", line 807, in end_update
    self._update()
  File "/usr/local/lib/python2.7/dist-packages/pyglet/text/layout.py", line 1838, in _update
    self._update_flow_glyphs()
  File "/usr/local/lib/python2.7/dist-packages/pyglet/text/layout.py", line 1929, in _update_flow_glyphs
    invalid_start, len(self._document.text)):
  File "/usr/local/lib/python2.7/dist-packages/pyglet/text/layout.py", line 1020, in _flow_glyphs
    for line in self._flow_glyphs_wrap(glyphs, owner_runs, start, end):
  File "/usr/local/lib/python2.7/dist-packages/pyglet/text/layout.py", line 1216, in _flow_glyphs_wrap
    k, g = run_accum[0].glyphs[0]
AttributeError: '_InlineElementBox' object has no attribute 'glyphs'

Original comment by ha...@centrum.cz on 7 Mar 2013 at 6:56

GoogleCodeExporter commented 9 years ago

Original comment by ha...@centrum.cz on 8 Mar 2013 at 7:55

Attachments: