aboutsummaryrefslogtreecommitdiff
path: root/backends
diff options
context:
space:
mode:
Diffstat (limited to 'backends')
-rw-r--r--backends/base-backend.cpp7
-rw-r--r--backends/events/dinguxsdl/dinguxsdl-events.cpp12
-rw-r--r--backends/events/gph/gph-events.cpp262
-rw-r--r--backends/events/linuxmotosdl/linuxmotosdl-events.cpp14
-rw-r--r--backends/events/maemosdl/maemosdl-events.cpp155
-rw-r--r--backends/events/maemosdl/maemosdl-events.h52
-rw-r--r--backends/events/openpandora/op-events.cpp32
-rw-r--r--backends/events/ps3sdl/ps3sdl-events.cpp163
-rw-r--r--backends/events/ps3sdl/ps3sdl-events.h38
-rw-r--r--backends/events/sdl/sdl-events.cpp215
-rw-r--r--backends/events/sdl/sdl-events.h18
-rw-r--r--backends/events/symbiansdl/symbiansdl-events.cpp15
-rw-r--r--backends/events/symbiansdl/symbiansdl-events.h1
-rw-r--r--backends/events/webossdl/webossdl-events.cpp398
-rw-r--r--backends/events/webossdl/webossdl-events.h74
-rw-r--r--backends/events/wincesdl/wincesdl-events.cpp19
-rw-r--r--backends/events/wincesdl/wincesdl-events.h2
-rw-r--r--backends/fs/ds/ds-fs-factory.cpp2
-rw-r--r--backends/fs/n64/n64-fs-factory.cpp1
-rw-r--r--backends/fs/n64/n64-fs.cpp1
-rw-r--r--backends/fs/n64/romfsstream.cpp1
-rw-r--r--backends/fs/posix/posix-fs-factory.cpp2
-rw-r--r--backends/fs/posix/posix-fs-factory.h1
-rw-r--r--backends/fs/posix/posix-fs.cpp2
-rw-r--r--backends/fs/ps2/ps2-fs-factory.cpp2
-rw-r--r--backends/fs/ps3/ps3-fs-factory.cpp26
-rw-r--r--backends/fs/ps3/ps3-fs-factory.h36
-rw-r--r--backends/fs/psp/psp-fs-factory.cpp2
-rw-r--r--backends/fs/stdiostream.cpp4
-rw-r--r--backends/fs/symbian/symbian-fs.cpp2
-rw-r--r--backends/fs/symbian/symbianstream.cpp1
-rw-r--r--backends/fs/wii/wii-fs-factory.cpp3
-rw-r--r--backends/fs/wii/wii-fs-factory.h1
-rw-r--r--backends/fs/wii/wii-fs.cpp1
-rw-r--r--backends/fs/windows/windows-fs.cpp12
-rw-r--r--backends/fs/windows/windows-fs.h11
-rw-r--r--backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp39
-rw-r--r--backends/graphics/dinguxsdl/dinguxsdl-graphics.h2
-rw-r--r--backends/graphics/gph/gph-graphics.cpp150
-rw-r--r--backends/graphics/gph/gph-graphics.h4
-rw-r--r--backends/graphics/graphics.h4
-rw-r--r--backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp25
-rw-r--r--backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h3
-rw-r--r--backends/graphics/opengl/gltexture.h20
-rw-r--r--backends/graphics/opengl/opengl-graphics.cpp53
-rw-r--r--backends/graphics/opengl/opengl-graphics.h21
-rw-r--r--backends/graphics/openglsdl/openglsdl-graphics.cpp106
-rw-r--r--backends/graphics/openglsdl/openglsdl-graphics.h15
-rw-r--r--backends/graphics/openpandora/op-graphics.h2
-rw-r--r--backends/graphics/sdl/sdl-graphics.cpp35
-rw-r--r--backends/graphics/sdl/sdl-graphics.h86
-rw-r--r--backends/graphics/surfacesdl/surfacesdl-graphics.cpp70
-rw-r--r--backends/graphics/surfacesdl/surfacesdl-graphics.h11
-rw-r--r--backends/graphics/symbiansdl/symbiansdl-graphics.cpp1
-rw-r--r--backends/graphics/symbiansdl/symbiansdl-graphics.h1
-rw-r--r--backends/graphics/wincesdl/wincesdl-graphics.cpp46
-rw-r--r--backends/graphics/wincesdl/wincesdl-graphics.h7
-rw-r--r--backends/log/log.cpp1
-rw-r--r--backends/log/log.h1
-rw-r--r--backends/mixer/sdl13/sdl13-mixer.cpp109
-rw-r--r--backends/mixer/sdl13/sdl13-mixer.h67
-rw-r--r--backends/mixer/symbiansdl/symbiansdl-mixer.cpp1
-rw-r--r--backends/mixer/symbiansdl/symbiansdl-mixer.h1
-rw-r--r--backends/mixer/wincesdl/wincesdl-mixer.cpp12
-rw-r--r--backends/mixer/wincesdl/wincesdl-mixer.h1
-rw-r--r--backends/module.mk30
-rw-r--r--backends/platform/android/android.cpp3
-rw-r--r--backends/platform/android/android.h1
-rw-r--r--backends/platform/android/android.mk1
-rw-r--r--backends/platform/android/asset-archive.h1
-rw-r--r--backends/platform/android/events.cpp1
-rw-r--r--backends/platform/android/gfx.cpp1
-rw-r--r--backends/platform/android/jni.cpp4
-rw-r--r--backends/platform/android/jni.h1
-rw-r--r--backends/platform/android/module.mk1
-rw-r--r--backends/platform/android/org/inodes/gus/scummvm/EditableSurfaceView.java1
-rw-r--r--backends/platform/android/org/inodes/gus/scummvm/PluginProvider.java1
-rw-r--r--backends/platform/android/org/inodes/gus/scummvm/ScummVM.java1
-rw-r--r--backends/platform/android/org/inodes/gus/scummvm/ScummVMActivity.java1
-rw-r--r--backends/platform/android/org/inodes/gus/scummvm/ScummVMApplication.java1
-rw-r--r--backends/platform/android/org/inodes/gus/scummvm/ScummVMEvents.java1
-rw-r--r--backends/platform/android/org/inodes/gus/scummvm/Unpacker.java7
-rw-r--r--backends/platform/android/texture.cpp1
-rw-r--r--backends/platform/android/texture.h1
-rw-r--r--backends/platform/bada/README.TXT92
-rw-r--r--backends/platform/bada/application.cpp111
-rw-r--r--backends/platform/bada/application.h54
-rw-r--r--backends/platform/bada/audio.cpp260
-rw-r--r--backends/platform/bada/audio.h73
-rw-r--r--backends/platform/bada/bada.mk5
-rw-r--r--backends/platform/bada/form.cpp464
-rw-r--r--backends/platform/bada/form.h108
-rw-r--r--backends/platform/bada/fs.cpp435
-rw-r--r--backends/platform/bada/fs.h82
-rw-r--r--backends/platform/bada/graphics.cpp261
-rw-r--r--backends/platform/bada/graphics.h72
-rw-r--r--backends/platform/bada/main.cpp67
-rw-r--r--backends/platform/bada/missing.cpp113
-rw-r--r--backends/platform/bada/portdefs.h84
-rw-r--r--backends/platform/bada/sscanf.cpp213
-rw-r--r--backends/platform/bada/system.cpp506
-rw-r--r--backends/platform/bada/system.h102
-rw-r--r--backends/platform/dc/DCLauncherDialog.h1
-rw-r--r--backends/platform/dc/README1
-rw-r--r--backends/platform/dc/audio.cpp2
-rw-r--r--backends/platform/dc/cache.S1
-rw-r--r--backends/platform/dc/dc-fs.cpp3
-rw-r--r--backends/platform/dc/dc.h1
-rw-r--r--backends/platform/dc/dcmain.cpp1
-rw-r--r--backends/platform/dc/display.cpp1
-rw-r--r--backends/platform/dc/input.cpp1
-rw-r--r--backends/platform/dc/label.cpp1
-rw-r--r--backends/platform/dc/plugin_head.S1
-rw-r--r--backends/platform/dc/selector.cpp27
-rw-r--r--backends/platform/dingux/README.DINGUX1
-rw-r--r--backends/platform/dingux/scummvm.gpe1
-rw-r--r--backends/platform/ds/arm7/source/libcartreset/cartreset.c3
-rw-r--r--backends/platform/ds/arm7/source/libcartreset/cartreset_nolibfat.h1
-rw-r--r--backends/platform/ds/arm7/source/main.cpp1
-rw-r--r--backends/platform/ds/arm9/dist/readme_ds.txt5
-rw-r--r--backends/platform/ds/arm9/source/dsoptions.cpp1
-rw-r--r--backends/platform/ds/arm9/source/fat/disc_io.h1
-rw-r--r--backends/platform/ds/arm9/source/fat/io_m3_common.c1
-rw-r--r--backends/platform/ds/arm9/source/fat/io_m3_common.h1
-rw-r--r--backends/platform/ds/arm9/source/fat/io_m3sd_asm.s1
-rw-r--r--backends/platform/ds/arm9/source/fat/io_njsd.c2
-rw-r--r--backends/platform/ds/arm9/source/fat/io_scsd.c2
-rw-r--r--backends/platform/ds/arm9/source/fat/io_scsd_asm.s11
-rw-r--r--backends/platform/ds/arm9/source/fat/io_sd_common.c2
-rw-r--r--backends/platform/ds/arm9/source/fat/m3sd.s1
-rw-r--r--backends/platform/ds/arm9/source/keys.cpp1
-rw-r--r--backends/platform/ds/arm9/source/osystem_ds.cpp2
-rw-r--r--backends/platform/ds/arm9/source/scummhelp.cpp1
-rw-r--r--backends/platform/ds/ds.mk1
-rw-r--r--backends/platform/gph/build/gp2xwiz-bundle.sh10
-rw-r--r--backends/platform/gph/devices/gp2x/mmuhack/README (renamed from backends/platform/gph/devices/gp2x/mmuhack/readme.txt)8
-rw-r--r--backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.h1
-rw-r--r--backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.s1
-rw-r--r--backends/platform/gph/gph-backend.cpp97
-rw-r--r--backends/platform/gph/gph-hw.cpp58
-rw-r--r--backends/platform/gph/gph-hw.h8
-rw-r--r--backends/platform/gph/gph-main.cpp4
-rw-r--r--backends/platform/gph/gph.h (renamed from backends/platform/gph/gph-sdl.h)2
-rw-r--r--backends/platform/iphone/iphone_main.m1
-rw-r--r--backends/platform/iphone/iphone_video.m1
-rw-r--r--backends/platform/maemo/debian/changelog227
-rw-r--r--backends/platform/maemo/debian/compat1
-rw-r--r--backends/platform/maemo/debian/control51
-rw-r--r--backends/platform/maemo/debian/copyright22
-rw-r--r--backends/platform/maemo/debian/postinst25
-rwxr-xr-xbackends/platform/maemo/debian/rules71
-rw-r--r--backends/platform/maemo/debian/scummvm.dirs8
-rw-r--r--backends/platform/maemo/maemo-common.h56
-rw-r--r--backends/platform/maemo/maemo.cpp113
-rw-r--r--backends/platform/maemo/maemo.h56
-rw-r--r--backends/platform/maemo/main.cpp52
-rw-r--r--backends/platform/maemo/module.mk13
-rw-r--r--backends/platform/maemo/scummvm-1.1.0-maemo.patch1371
-rw-r--r--backends/platform/n64/Makefile1
-rw-r--r--backends/platform/n64/README.N641
-rw-r--r--backends/platform/n64/framfs_save_manager.cpp1
-rw-r--r--backends/platform/n64/framfs_save_manager.h1
-rw-r--r--backends/platform/n64/n64.mk1
-rw-r--r--backends/platform/n64/nintendo64.cpp1
-rw-r--r--backends/platform/n64/osys_n64.h1
-rw-r--r--backends/platform/n64/osys_n64_base.cpp1
-rw-r--r--backends/platform/n64/osys_n64_events.cpp1
-rw-r--r--backends/platform/n64/osys_n64_utilities.cpp1
-rwxr-xr-xbackends/platform/n64/pad_rom.sh1
-rw-r--r--backends/platform/n64/pakfs_save_manager.cpp1
-rw-r--r--backends/platform/n64/pakfs_save_manager.h1
-rw-r--r--backends/platform/n64/portdefs.h1
-rwxr-xr-xbackends/platform/openpandora/build/PXML.xml83
-rw-r--r--backends/platform/openpandora/build/PXML_schema.xsd341
-rwxr-xr-xbackends/platform/openpandora/build/pnd_make.sh340
-rwxr-xr-xbackends/platform/openpandora/build/runscummvm.sh2
-rw-r--r--backends/platform/openpandora/op-backend.cpp112
-rwxr-xr-xbackends/platform/openpandora/op-bundle.mk3
-rw-r--r--backends/platform/openpandora/op-main.cpp2
-rw-r--r--backends/platform/openpandora/op-options.cpp8
-rw-r--r--backends/platform/openpandora/op-options.h2
-rw-r--r--backends/platform/openpandora/op-sdl.h2
-rw-r--r--backends/platform/ps2/DmaPipe.h1
-rw-r--r--backends/platform/ps2/Gs2dScreen.cpp2
-rw-r--r--backends/platform/ps2/Makefile.gdb1
-rw-r--r--backends/platform/ps2/Makefile.ps21
-rw-r--r--backends/platform/ps2/asyncfio.cpp1
-rw-r--r--backends/platform/ps2/asyncfio.h1
-rw-r--r--backends/platform/ps2/eecodyvdfs.c2
-rw-r--r--backends/platform/ps2/eecodyvdfs.h1
-rw-r--r--backends/platform/ps2/iop/CoDyVDfs/iop/cdtypes.h1
-rw-r--r--backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.c1
-rw-r--r--backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.h1
-rw-r--r--backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.c1
-rw-r--r--backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.h1
-rw-r--r--backends/platform/ps2/iop/CoDyVDfs/iop/imports.lst2
-rw-r--r--backends/platform/ps2/iop/CoDyVDfs/iop/rpcfs.c2
-rw-r--r--backends/platform/ps2/iop/rpckbd/src/imports.lst1
-rw-r--r--backends/platform/ps2/irxboot.cpp1
-rw-r--r--backends/platform/ps2/irxboot.h1
-rw-r--r--backends/platform/ps2/ps2debug.cpp1
-rw-r--r--backends/platform/ps2/ps2debug.h1
-rw-r--r--backends/platform/ps2/ps2input.cpp2
-rw-r--r--backends/platform/ps2/ps2input.h1
-rw-r--r--backends/platform/ps2/ps2mutex.cpp1
-rw-r--r--backends/platform/ps2/ps2pad.cpp2
-rw-r--r--backends/platform/ps2/ps2pad.h1
-rw-r--r--backends/platform/ps2/rpckbd.c1
-rw-r--r--backends/platform/ps2/rpckbd.h1
-rw-r--r--backends/platform/ps2/sdlkeys.h2
-rw-r--r--backends/platform/ps2/systemps2.cpp4
-rw-r--r--backends/platform/psp/Makefile1
-rw-r--r--backends/platform/psp/README.PSP3
-rw-r--r--backends/platform/psp/README.PSP.in1
-rw-r--r--backends/platform/psp/display_manager.cpp3
-rw-r--r--backends/platform/psp/dummy.cpp2
-rw-r--r--backends/platform/psp/image_viewer.cpp4
-rw-r--r--backends/platform/psp/image_viewer.h2
-rw-r--r--backends/platform/psp/input.cpp2
-rw-r--r--backends/platform/psp/memory.h2
-rw-r--r--backends/platform/psp/mp3.cpp6
-rw-r--r--backends/platform/psp/mp3.h4
-rw-r--r--backends/platform/psp/png_loader.cpp10
-rw-r--r--backends/platform/psp/png_loader.h4
-rw-r--r--backends/platform/psp/portdefs.h2
-rw-r--r--backends/platform/psp/powerman.cpp2
-rw-r--r--backends/platform/psp/pspkeyboard.cpp2
-rw-r--r--backends/platform/psp/rtc.cpp3
-rw-r--r--backends/platform/psp/thread.cpp1
-rw-r--r--backends/platform/psp/thread.h2
-rw-r--r--backends/platform/psp/trace.cpp1
-rwxr-xr-xbackends/platform/sdl/macosx/appmenu_osx.h32
-rwxr-xr-xbackends/platform/sdl/macosx/appmenu_osx.mm110
-rw-r--r--backends/platform/sdl/macosx/macosx.cpp65
-rw-r--r--backends/platform/sdl/macosx/macosx.h2
-rw-r--r--backends/platform/sdl/main.cpp3
-rw-r--r--backends/platform/sdl/module.mk9
-rw-r--r--backends/platform/sdl/posix/posix-main.cpp2
-rw-r--r--backends/platform/sdl/ps3/ps3-main.cpp49
-rw-r--r--backends/platform/sdl/ps3/ps3.cpp94
-rw-r--r--backends/platform/sdl/ps3/ps3.h47
-rw-r--r--backends/platform/sdl/sdl-sys.h23
-rw-r--r--backends/platform/sdl/sdl.cpp82
-rw-r--r--backends/platform/sdl/sdl.h6
-rw-r--r--backends/platform/sdl/win32/win32.cpp116
-rw-r--r--backends/platform/sdl/win32/win32.h2
-rw-r--r--backends/platform/symbian/.placeholder2
-rw-r--r--backends/platform/symbian/BuildPackageUpload_AllVersions.pl2
-rw-r--r--backends/platform/symbian/README12
-rw-r--r--backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg2
-rw-r--r--backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in6
-rw-r--r--backends/platform/symbian/S60v3/ScummVM_Loc.rss1
-rw-r--r--backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in6
-rw-r--r--backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg5
-rw-r--r--backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3_split.pkg88
-rw-r--r--backends/platform/symbian/S60v3/scummvm_A0000658_loc.rss1
-rw-r--r--backends/platform/symbian/S60v3/scummvm_A0000658_reg.rss1
-rw-r--r--backends/platform/symbian/S60v3/scummvm_reg.rss1
-rw-r--r--backends/platform/symbian/S80/ScummVM_S80.mmp.in1
-rw-r--r--backends/platform/symbian/S90/Scummvm_S90.mmp.in1
-rw-r--r--backends/platform/symbian/UIQ2/ScummVM.rss1
-rw-r--r--backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in1
-rw-r--r--backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg2
-rw-r--r--backends/platform/symbian/UIQ3/ScummVM.rss1
-rw-r--r--backends/platform/symbian/UIQ3/ScummVM_A0000658.rss1
-rw-r--r--backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in6
-rw-r--r--backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in6
-rw-r--r--backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg6
-rw-r--r--backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3_split.pkg86
-rw-r--r--backends/platform/symbian/UIQ3/scummvm_A0000658_loc.rss1
-rw-r--r--backends/platform/symbian/UIQ3/scummvm_A0000658_reg.rss1
-rw-r--r--backends/platform/symbian/UIQ3/scummvm_loc.rss1
-rw-r--r--backends/platform/symbian/UIQ3/scummvm_reg.rss1
-rw-r--r--backends/platform/symbian/mmp/scummvm_agi.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_agos.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_base.mmp.in4
-rw-r--r--backends/platform/symbian/mmp/scummvm_cine.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_cruise.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_draci.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_drascula.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_gob.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_groovie.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_hugo.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_kyra.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_lastexpress.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_lure.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_m4.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_made.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_mohawk.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_parallaction.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_queen.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_saga.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_sci.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_scumm.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_sky.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_sword1.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_sword2.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_teenagent.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_tinsel.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_toon.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_touche.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_tsage.mmp.in2
-rw-r--r--backends/platform/symbian/mmp/scummvm_tucker.mmp.in2
-rw-r--r--backends/platform/symbian/res/ScummVmAif.rss3
-rw-r--r--backends/platform/symbian/src/ScummApp.cpp2
-rw-r--r--backends/platform/symbian/src/ScummApp.h2
-rw-r--r--backends/platform/symbian/src/portdefs.h6
-rw-r--r--backends/platform/webos/webos.mk21
-rw-r--r--backends/platform/wii/gdb.txt1
-rw-r--r--backends/platform/wii/main.cpp1
-rw-r--r--backends/platform/wii/module.mk1
-rw-r--r--backends/platform/wii/options.cpp1
-rw-r--r--backends/platform/wii/options.h1
-rw-r--r--backends/platform/wii/osystem_events.cpp1
-rw-r--r--backends/platform/wii/osystem_gfx.cpp2
-rw-r--r--backends/platform/wii/osystem_sfx.cpp1
-rw-r--r--backends/platform/wii/wii.mk1
-rw-r--r--backends/platform/wince/CEActionsPocket.cpp14
-rw-r--r--backends/platform/wince/CEActionsSmartphone.cpp14
-rw-r--r--backends/platform/wince/CELauncherDialog.cpp6
-rw-r--r--backends/platform/wince/CEScaler.cpp1
-rw-r--r--backends/platform/wince/CEgui/CEGUI.h1
-rw-r--r--backends/platform/wince/CEgui/PanelKeyboard.cpp1
-rw-r--r--backends/platform/wince/CEkeys/CEKeys.h1
-rw-r--r--backends/platform/wince/CEkeys/EventsBuffer.cpp2
-rw-r--r--backends/platform/wince/README-WinCE.txt45
-rw-r--r--backends/platform/wince/missing/assert.h1
-rw-r--r--backends/platform/wince/missing/io.h1
-rw-r--r--backends/platform/wince/wince-sdl.cpp86
-rw-r--r--backends/platform/wince/wince-sdl.h1
-rw-r--r--backends/platform/wince/wince.mk4
-rw-r--r--backends/plugins/ds/ds-provider.cpp1
-rw-r--r--backends/plugins/ds/ds-provider.h1
-rw-r--r--backends/plugins/elf/arm-loader.cpp1
-rw-r--r--backends/plugins/elf/arm-loader.h1
-rw-r--r--backends/plugins/elf/elf-loader.cpp1
-rw-r--r--backends/plugins/elf/elf-loader.h1
-rw-r--r--backends/plugins/elf/elf-provider.cpp1
-rw-r--r--backends/plugins/elf/elf-provider.h1
-rw-r--r--backends/plugins/elf/elf32.h1
-rw-r--r--backends/plugins/elf/memory-manager.cpp3
-rw-r--r--backends/plugins/elf/mips-loader.cpp1
-rw-r--r--backends/plugins/elf/mips-loader.h1
-rw-r--r--backends/plugins/elf/ppc-loader.cpp1
-rw-r--r--backends/plugins/elf/ppc-loader.h1
-rw-r--r--backends/plugins/elf/shorts-segment-manager.cpp4
-rw-r--r--backends/plugins/elf/shorts-segment-manager.h1
-rw-r--r--backends/plugins/elf/version.cpp1
-rw-r--r--backends/plugins/elf/version.h1
-rw-r--r--backends/plugins/ps2/ps2-provider.cpp1
-rw-r--r--backends/plugins/ps2/ps2-provider.h1
-rw-r--r--backends/plugins/psp/psp-provider.cpp1
-rw-r--r--backends/plugins/psp/psp-provider.h1
-rw-r--r--backends/plugins/wii/wii-provider.cpp1
-rw-r--r--backends/plugins/wii/wii-provider.h1
-rw-r--r--backends/saves/psp/psp-saves.cpp1
-rw-r--r--backends/taskbar/unity/unity-taskbar.cpp13
-rw-r--r--backends/taskbar/unity/unity-taskbar.h12
-rw-r--r--backends/taskbar/win32/mingw-compat.h21
-rw-r--r--backends/taskbar/win32/win32-taskbar.cpp166
-rw-r--r--backends/taskbar/win32/win32-taskbar.h14
-rwxr-xr-xbackends/timer/bada/timer.cpp115
-rwxr-xr-xbackends/timer/bada/timer.h62
-rw-r--r--backends/timer/default/default-timer.cpp36
-rw-r--r--backends/timer/default/default-timer.h7
-rw-r--r--backends/updates/macosx/macosx-updates.h48
-rw-r--r--backends/updates/macosx/macosx-updates.mm127
-rw-r--r--backends/vkeybd/virtual-keyboard-parser.cpp6
-rw-r--r--backends/vkeybd/virtual-keyboard.cpp1
369 files changed, 8135 insertions, 2678 deletions
diff --git a/backends/base-backend.cpp b/backends/base-backend.cpp
index 8d22ab732d..3e0005dedd 100644
--- a/backends/base-backend.cpp
+++ b/backends/base-backend.cpp
@@ -8,19 +8,16 @@
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
-
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
-
+ *
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
- *
*/
#include "backends/base-backend.h"
diff --git a/backends/events/dinguxsdl/dinguxsdl-events.cpp b/backends/events/dinguxsdl/dinguxsdl-events.cpp
index 946507ccfd..64d8fbeb62 100644
--- a/backends/events/dinguxsdl/dinguxsdl-events.cpp
+++ b/backends/events/dinguxsdl/dinguxsdl-events.cpp
@@ -50,7 +50,7 @@ bool DINGUXSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == PAD_DOWN) {
@@ -63,7 +63,7 @@ bool DINGUXSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == PAD_LEFT) {
@@ -76,7 +76,7 @@ bool DINGUXSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == PAD_RIGHT) {
@@ -89,7 +89,7 @@ bool DINGUXSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == BUT_Y) { // left mouse button
@@ -99,7 +99,7 @@ bool DINGUXSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
event.type = Common::EVENT_LBUTTONUP;
}
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == BUT_B) { // right mouse button
@@ -109,7 +109,7 @@ bool DINGUXSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
event.type = Common::EVENT_RBUTTONUP;
}
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == BUT_X) { // '.' skip dialogue
diff --git a/backends/events/gph/gph-events.cpp b/backends/events/gph/gph-events.cpp
index b461f85fbb..b4e106b790 100644
--- a/backends/events/gph/gph-events.cpp
+++ b/backends/events/gph/gph-events.cpp
@@ -42,167 +42,141 @@
#define JOY_YAXIS 1
/* Quick default button states for modifiers. */
-int BUTTON_STATE_L = false;
+int BUTTON_STATE_L = false;
#if defined(CAANOO)
- /* Caanoo: Main Joystick Button Mappings */
- /* The Caanoo has an analogue stick so no digital DPAD */
- enum {
- /* Joystick Buttons */
- BUTTON_A = 0,
- BUTTON_X = 1,
- BUTTON_B = 2,
- BUTTON_Y = 3,
- BUTTON_L = 4,
- BUTTON_R = 5,
- BUTTON_HOME = 6, // Home
- BUTTON_HOLD = 7, // Hold (on Power)
- BUTTON_HELP = 8, // Help I
- BUTTON_HELP2 = 9, // Help II
- BUTTON_CLICK = 10 // Stick Click
- };
-
- enum {
- /* Unused Joystick Buttons on the Caanoo */
- BUTTON_VOLUP = 51,
- BUTTON_VOLDOWN = 52,
- BUTTON_UP = 53,
- BUTTON_UPLEFT = 54,
- BUTTON_LEFT = 55,
- BUTTON_DOWNLEFT = 56,
- BUTTON_DOWN = 57,
- BUTTON_DOWNRIGHT = 58,
- BUTTON_RIGHT = 59,
- BUTTON_UPRIGHT = 60,
- BUTTON_MENU = 61,
- BUTTON_SELECT = 62
- };
+/* Caanoo: Main Joystick Button Mappings */
+/* The Caanoo has an analogue stick so no digital DPAD */
+enum {
+ /* Joystick Buttons */
+ BUTTON_A = 0,
+ BUTTON_X = 1,
+ BUTTON_B = 2,
+ BUTTON_Y = 3,
+ BUTTON_L = 4,
+ BUTTON_R = 5,
+ BUTTON_HOME = 6, // Home
+ BUTTON_HOLD = 7, // Hold (on Power)
+ BUTTON_HELP = 8, // Help I
+ BUTTON_HELP2 = 9, // Help II
+ BUTTON_CLICK = 10 // Stick Click
+};
-#endif
+enum {
+ /* Unused Joystick Buttons on the Caanoo */
+ BUTTON_VOLUP = 51,
+ BUTTON_VOLDOWN = 52,
+ BUTTON_UP = 53,
+ BUTTON_UPLEFT = 54,
+ BUTTON_LEFT = 55,
+ BUTTON_DOWNLEFT = 56,
+ BUTTON_DOWN = 57,
+ BUTTON_DOWNRIGHT = 58,
+ BUTTON_RIGHT = 59,
+ BUTTON_UPRIGHT = 60,
+ BUTTON_MENU = 61,
+ BUTTON_SELECT = 62
+};
-#if defined(GP2XWIZ)
-
- /* Wiz: Main Joystick Mappings */
- enum {
- /* DPAD */
- BUTTON_UP = 0,
- BUTTON_UPLEFT = 1,
- BUTTON_LEFT = 2,
- BUTTON_DOWNLEFT = 3,
- BUTTON_DOWN = 4,
- BUTTON_DOWNRIGHT = 5,
- BUTTON_RIGHT = 6,
- BUTTON_UPRIGHT = 7,
- /* Joystick Buttons */
- BUTTON_MENU = 8,
- BUTTON_SELECT = 9,
- BUTTON_L = 10,
- BUTTON_R = 11,
- BUTTON_A = 12,
- BUTTON_B = 13,
- BUTTON_X = 14,
- BUTTON_Y = 15,
- BUTTON_VOLUP = 16,
- BUTTON_VOLDOWN = 17
- };
-
- enum {
- /* Unused Joystick Buttons on the Wiz */
- BUTTON_HOME = 51,
- BUTTON_HOLD = 52,
- BUTTON_CLICK = 53,
- BUTTON_HELP = 54,
- BUTTON_HELP2 = 55
- };
+#elif defined(GP2XWIZ)
-#endif
+/* Wiz: Main Joystick Mappings */
+enum {
+ /* DPAD */
+ BUTTON_UP = 0,
+ BUTTON_UPLEFT = 1,
+ BUTTON_LEFT = 2,
+ BUTTON_DOWNLEFT = 3,
+ BUTTON_DOWN = 4,
+ BUTTON_DOWNRIGHT = 5,
+ BUTTON_RIGHT = 6,
+ BUTTON_UPRIGHT = 7,
+ /* Joystick Buttons */
+ BUTTON_MENU = 8,
+ BUTTON_SELECT = 9,
+ BUTTON_L = 10,
+ BUTTON_R = 11,
+ BUTTON_A = 12,
+ BUTTON_B = 13,
+ BUTTON_X = 14,
+ BUTTON_Y = 15,
+ BUTTON_VOLUP = 16,
+ BUTTON_VOLDOWN = 17
+};
-#if defined(GP2X)
+enum {
+ /* Unused Joystick Buttons on the Wiz */
+ BUTTON_HOME = 51,
+ BUTTON_HOLD = 52,
+ BUTTON_CLICK = 53,
+ BUTTON_HELP = 54,
+ BUTTON_HELP2 = 55
+};
+
+#elif defined(GP2X)
enum {
/* DPAD/Stick */
- BUTTON_UP = 0,
- BUTTON_UPLEFT = 1,
- BUTTON_LEFT = 2,
- BUTTON_DOWNLEFT = 3,
- BUTTON_DOWN = 4,
- BUTTON_DOWNRIGHT = 5,
- BUTTON_RIGHT = 6,
- BUTTON_UPRIGHT = 7,
+ BUTTON_UP = 0,
+ BUTTON_UPLEFT = 1,
+ BUTTON_LEFT = 2,
+ BUTTON_DOWNLEFT = 3,
+ BUTTON_DOWN = 4,
+ BUTTON_DOWNRIGHT = 5,
+ BUTTON_RIGHT = 6,
+ BUTTON_UPRIGHT = 7,
/* Joystick Buttons */
- BUTTON_MENU = 8, // Start on F100 GP2X
- BUTTON_SELECT = 9,
- BUTTON_L = 10,
- BUTTON_R = 11,
- BUTTON_A = 12,
- BUTTON_B = 13,
- BUTTON_X = 14,
- BUTTON_Y = 15,
- BUTTON_VOLUP = 16,
- BUTTON_VOLDOWN = 17,
- BUTTON_CLICK = 18
+ BUTTON_MENU = 8, // Start on F100 GP2X
+ BUTTON_SELECT = 9,
+ BUTTON_L = 10,
+ BUTTON_R = 11,
+ BUTTON_A = 12,
+ BUTTON_B = 13,
+ BUTTON_X = 14,
+ BUTTON_Y = 15,
+ BUTTON_VOLUP = 16,
+ BUTTON_VOLDOWN = 17,
+ BUTTON_CLICK = 18
};
enum {
/* Unused Joystick Buttons on the GP2X */
- BUTTON_HOME = 51,
- BUTTON_HOLD = 52,
- BUTTON_HELP = 53,
- BUTTON_HELP2 = 54
+ BUTTON_HOME = 51,
+ BUTTON_HOLD = 52,
+ BUTTON_HELP = 53,
+ BUTTON_HELP2 = 54
};
#endif
enum {
/* Touchscreen TapMode */
- TAPMODE_LEFT = 0,
- TAPMODE_RIGHT = 1,
- TAPMODE_HOVER = 2
+ TAPMODE_LEFT = 0,
+ TAPMODE_RIGHT = 1,
+ TAPMODE_HOVER = 2
};
GPHEventSource::GPHEventSource()
- : _buttonStateL(false){
+ : _buttonStateL(false) {
}
-//void GPHEventSource::fillMouseEvent(Common::Event &event, int x, int y) {
-// if (GPHGraphicsManager::_videoMode.mode == GFX_HALF && !GPHGraphicsManager::_overlayVisible){
-// event.mouse.x = x*2;
-// event.mouse.y = y*2;
-// } else {
-// event.mouse.x = x;
-// event.mouse.y = y;
-// }
-//
-// // Update the "keyboard mouse" coords
-// _km.x = x;
-// _km.y = y;
-//
-// // Adjust for the screen scaling
-// if (!_overlayVisible) {
-// event.mouse.x /= _videoMode.scaleFactor;
-// event.mouse.y /= _videoMode.scaleFactor;
-// if (_videoMode.aspectRatioCorrection)
-// event.mouse.y = aspect2Real(event.mouse.y);
-// }
-//}
-
void GPHEventSource::moveStick() {
bool stickBtn[32];
memcpy(stickBtn, _stickBtn, sizeof(stickBtn));
- if ((stickBtn[0])||(stickBtn[2])||(stickBtn[4])||(stickBtn[6]))
+ if ((stickBtn[0]) || (stickBtn[2]) || (stickBtn[4]) || (stickBtn[6]))
stickBtn[1] = stickBtn[3] = stickBtn[5] = stickBtn[7] = 0;
- if ((stickBtn[1])||(stickBtn[2])||(stickBtn[3])) {
- if (_km.x_down_count!=2) {
+ if ((stickBtn[1]) || (stickBtn[2]) || (stickBtn[3])) {
+ if (_km.x_down_count != 2) {
_km.x_vel = -1;
_km.x_down_count = 1;
} else
_km.x_vel = -4;
- } else if ((stickBtn[5])||(stickBtn[6])||(stickBtn[7])) {
- if (_km.x_down_count!=2) {
+ } else if ((stickBtn[5]) || (stickBtn[6]) || (stickBtn[7])) {
+ if (_km.x_down_count != 2) {
_km.x_vel = 1;
_km.x_down_count = 1;
} else
@@ -212,14 +186,14 @@ void GPHEventSource::moveStick() {
_km.x_down_count = 0;
}
- if ((stickBtn[0])||(stickBtn[1])||(stickBtn[7])) {
- if (_km.y_down_count!=2) {
+ if ((stickBtn[0]) || (stickBtn[1]) || (stickBtn[7])) {
+ if (_km.y_down_count != 2) {
_km.y_vel = -1;
_km.y_down_count = 1;
} else
_km.y_vel = -4;
- } else if ((stickBtn[3])||(stickBtn[4])||(stickBtn[5])) {
- if (_km.y_down_count!=2) {
+ } else if ((stickBtn[3]) || (stickBtn[4]) || (stickBtn[5])) {
+ if (_km.y_down_count != 2) {
_km.y_vel = 1;
_km.y_down_count = 1;
} else
@@ -233,7 +207,7 @@ void GPHEventSource::moveStick() {
/* Custom handleMouseButtonDown/handleMouseButtonUp to deal with 'Tap Mode' for the touchscreen */
bool GPHEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) {
- if (ev.button.button == SDL_BUTTON_LEFT){
+ if (ev.button.button == SDL_BUTTON_LEFT) {
if (BUTTON_STATE_L == true) /* BUTTON_STATE_L = Left Trigger Held, force Right Click */
event.type = Common::EVENT_RBUTTONDOWN;
else if (GPH::tapmodeLevel == TAPMODE_LEFT) /* TAPMODE_LEFT = Left Click Tap Mode */
@@ -244,8 +218,7 @@ bool GPHEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event)
event.type = Common::EVENT_MOUSEMOVE;
else
event.type = Common::EVENT_LBUTTONDOWN; /* For normal mice etc. */
- }
- else if (ev.button.button == SDL_BUTTON_RIGHT)
+ } else if (ev.button.button == SDL_BUTTON_RIGHT)
event.type = Common::EVENT_RBUTTONDOWN;
#if defined(SDL_BUTTON_WHEELUP) && defined(SDL_BUTTON_WHEELDOWN)
else if (ev.button.button == SDL_BUTTON_WHEELUP)
@@ -260,13 +233,13 @@ bool GPHEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event)
else
return false;
- fillMouseEvent(event, ev.button.x, ev.button.y);
+ processMouseEvent(event, ev.button.x, ev.button.y);
return true;
}
bool GPHEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) {
- if (ev.button.button == SDL_BUTTON_LEFT){
+ if (ev.button.button == SDL_BUTTON_LEFT) {
if (BUTTON_STATE_L == true) /* BUTTON_STATE_L = Left Trigger Held, force Right Click */
event.type = Common::EVENT_RBUTTONUP;
else if (GPH::tapmodeLevel == TAPMODE_LEFT) /* TAPMODE_LEFT = Left Click Tap Mode */
@@ -277,8 +250,7 @@ bool GPHEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) {
event.type = Common::EVENT_MOUSEMOVE;
else
event.type = Common::EVENT_LBUTTONUP; /* For normal mice etc. */
- }
- else if (ev.button.button == SDL_BUTTON_RIGHT)
+ } else if (ev.button.button == SDL_BUTTON_RIGHT)
event.type = Common::EVENT_RBUTTONUP;
#if defined(SDL_BUTTON_MIDDLE)
else if (ev.button.button == SDL_BUTTON_MIDDLE)
@@ -287,7 +259,7 @@ bool GPHEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) {
else
return false;
- fillMouseEvent(event, ev.button.x, ev.button.y);
+ processMouseEvent(event, ev.button.x, ev.button.y);
return true;
}
@@ -310,16 +282,16 @@ bool GPHEventSource::handleJoyButtonDown(SDL_Event &ev, Common::Event &event) {
case BUTTON_UPRIGHT:
moveStick();
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
break;
case BUTTON_B:
case BUTTON_CLICK:
event.type = Common::EVENT_LBUTTONDOWN;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
break;
case BUTTON_X:
event.type = Common::EVENT_RBUTTONDOWN;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
break;
case BUTTON_L:
BUTTON_STATE_L = true;
@@ -354,8 +326,8 @@ bool GPHEventSource::handleJoyButtonDown(SDL_Event &ev, Common::Event &event) {
if (BUTTON_STATE_L == true) {
event.type = Common::EVENT_PREDICTIVE_DIALOG;
} else {
- event.kbd.keycode = Common::KEYCODE_PERIOD;
- event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0);
+ event.kbd.keycode = Common::KEYCODE_PERIOD;
+ event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0);
}
break;
case BUTTON_Y:
@@ -433,16 +405,16 @@ bool GPHEventSource::handleJoyButtonUp(SDL_Event &ev, Common::Event &event) {
case BUTTON_UPRIGHT:
moveStick();
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
break;
case BUTTON_B:
case BUTTON_CLICK:
event.type = Common::EVENT_LBUTTONUP;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
break;
case BUTTON_X:
event.type = Common::EVENT_RBUTTONUP;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
break;
case BUTTON_L:
BUTTON_STATE_L = false;
@@ -500,7 +472,7 @@ bool GPHEventSource::handleJoyButtonUp(SDL_Event &ev, Common::Event &event) {
return true;
}
-bool GPHEventSource::remapKey(SDL_Event &ev,Common::Event &event) {
+bool GPHEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
return false;
}
diff --git a/backends/events/linuxmotosdl/linuxmotosdl-events.cpp b/backends/events/linuxmotosdl/linuxmotosdl-events.cpp
index e859c5291b..5d9f032e19 100644
--- a/backends/events/linuxmotosdl/linuxmotosdl-events.cpp
+++ b/backends/events/linuxmotosdl/linuxmotosdl-events.cpp
@@ -132,7 +132,7 @@ bool LinuxmotoSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == SDLK_RIGHT) {
if (ev.type == SDL_KEYDOWN) {
@@ -144,7 +144,7 @@ bool LinuxmotoSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == SDLK_DOWN) {
@@ -157,7 +157,7 @@ bool LinuxmotoSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == SDLK_UP) {
@@ -170,7 +170,7 @@ bool LinuxmotoSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == SDLK_RETURN) {
@@ -181,7 +181,7 @@ bool LinuxmotoSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
event.type = Common::EVENT_LBUTTONUP;
}
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == SDLK_PLUS) {
@@ -191,7 +191,7 @@ bool LinuxmotoSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
} else {
event.type = Common::EVENT_RBUTTONUP;
}
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else if (ev.key.keysym.sym == SDLK_MINUS) {
@@ -202,7 +202,7 @@ bool LinuxmotoSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
event.type = Common::EVENT_LBUTTONUP;
}
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
} else {
diff --git a/backends/events/maemosdl/maemosdl-events.cpp b/backends/events/maemosdl/maemosdl-events.cpp
new file mode 100644
index 0000000000..32d5cfb5ac
--- /dev/null
+++ b/backends/events/maemosdl/maemosdl-events.cpp
@@ -0,0 +1,155 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#if defined(MAEMO)
+
+#include "common/scummsys.h"
+
+#include "backends/events/maemosdl/maemosdl-events.h"
+#include "common/translation.h"
+
+namespace Maemo {
+
+MaemoSdlEventSource::MaemoSdlEventSource() : SdlEventSource(), _clickEnabled(true) {
+
+}
+
+bool MaemoSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
+
+ Model model = Model(((OSystem_SDL_Maemo *)g_system)->getModel());
+ debug(10, "Model: %s %u %s %s", model.hwId, model.modelType, model.hwAlias, model.hwKeyboard ? "true" : "false");
+
+ // List of special N810 keys:
+ // SDLK_F4 -> menu
+ // SDLK_F5 -> home
+ // SDLK_F6 -> fullscreen
+ // SDLK_F7 -> zoom +
+ // SDLK_F8 -> zoom -
+
+ switch (ev.type) {
+ case SDL_KEYDOWN:{
+ if (ev.key.keysym.sym == SDLK_F4) {
+ event.type = Common::EVENT_MAINMENU;
+ debug(9, "remapping to main menu");
+ return true;
+ } else if (ev.key.keysym.sym == SDLK_F6) {
+ if (!model.hwKeyboard) {
+ event.type = Common::EVENT_KEYDOWN;
+ event.kbd.keycode = Common::KEYCODE_F7;
+ event.kbd.ascii = Common::ASCII_F7;
+ event.kbd.flags = 0;
+ debug(9, "remapping to F7 down (virtual keyboard)");
+ return true;
+ } else {
+ // handled in keyup
+ }
+ } else if (ev.key.keysym.sym == SDLK_F7) {
+ event.type = Common::EVENT_RBUTTONDOWN;
+ processMouseEvent(event, _km.x, _km.y);
+ debug(9, "remapping to right click down");
+ return true;
+ } else if (ev.key.keysym.sym == SDLK_F8) {
+ if (ev.key.keysym.mod & KMOD_CTRL) {
+ event.type = Common::EVENT_KEYDOWN;
+ event.kbd.keycode = Common::KEYCODE_F7;
+ event.kbd.ascii = Common::ASCII_F7;
+ event.kbd.flags = 0;
+ debug(9, "remapping to F7 down (virtual keyboard)");
+ return true;
+ } else {
+ // handled in keyup
+ return true;
+ }
+ }
+ break;
+ }
+ case SDL_KEYUP: {
+ if (ev.key.keysym.sym == SDLK_F4) {
+ event.type = Common::EVENT_MAINMENU;
+ return true;
+ } else if (ev.key.keysym.sym == SDLK_F6) {
+ if (!model.hwKeyboard) {
+ event.type = Common::EVENT_KEYUP;
+ event.kbd.keycode = Common::KEYCODE_F7;
+ event.kbd.ascii = Common::ASCII_F7;
+ event.kbd.flags = 0;
+ debug(9, "remapping to F7 down (virtual keyboard)");
+ return true;
+ } else {
+ bool currentState = ((OSystem_SDL *)g_system)->getGraphicsManager()->getFeatureState(OSystem::kFeatureFullscreenMode);
+ g_system->beginGFXTransaction();
+ ((OSystem_SDL *)g_system)->getGraphicsManager()->setFeatureState(OSystem::kFeatureFullscreenMode, !currentState);
+ g_system->endGFXTransaction();
+ debug(9, "remapping to full screen toggle");
+ return true;
+ }
+ } else if (ev.key.keysym.sym == SDLK_F7) {
+ event.type = Common::EVENT_RBUTTONUP;
+ processMouseEvent(event, _km.x, _km.y);
+ debug(9, "remapping to right click up");
+ return true;
+ } else if (ev.key.keysym.sym == SDLK_F8) {
+ if (ev.key.keysym.mod & KMOD_CTRL) {
+ event.type = Common::EVENT_KEYUP;
+ event.kbd.keycode = Common::KEYCODE_F7;
+ event.kbd.ascii = Common::ASCII_F7;
+ event.kbd.flags = 0;
+ debug(9, "remapping to F7 up (virtual keyboard)");
+ return true;
+ } else {
+ _clickEnabled = !_clickEnabled;
+ ((SurfaceSdlGraphicsManager*) _graphicsManager)->displayMessageOnOSD(
+ _clickEnabled ? _("Clicking Enabled") : _("Clicking Disabled"));
+ debug(9, "remapping to click toggle");
+ return true;
+ }
+ }
+ break;
+ }
+ }
+ // Invoke parent implementation of this method
+ return SdlEventSource::remapKey(ev, event);
+}
+
+bool MaemoSdlEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) {
+
+ if (ev.button.button == SDL_BUTTON_LEFT && !_clickEnabled) {
+ return false;
+ }
+
+ // Invoke parent implementation of this method
+ return SdlEventSource::handleMouseButtonDown(ev, event);
+}
+
+bool MaemoSdlEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) {
+
+ if (ev.button.button == SDL_BUTTON_LEFT && !_clickEnabled) {
+ return false;
+ }
+
+ // Invoke parent implementation of this method
+ return SdlEventSource::handleMouseButtonUp(ev, event);
+}
+
+} // namespace Maemo
+
+#endif // if defined(MAEMO)
diff --git a/backends/events/maemosdl/maemosdl-events.h b/backends/events/maemosdl/maemosdl-events.h
new file mode 100644
index 0000000000..5c06c4bc22
--- /dev/null
+++ b/backends/events/maemosdl/maemosdl-events.h
@@ -0,0 +1,52 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#if defined(MAEMO)
+
+#if !defined(BACKEND_EVENTS_SDL_MAEMO_H) && !defined(DISABLE_DEFAULT_EVENTMANAGER)
+#define BACKEND_EVENTS_SDL_MAEMO_H
+
+#include "backends/events/sdl/sdl-events.h"
+#include "backends/platform/maemo/maemo.h"
+#include "backends/graphics/surfacesdl/surfacesdl-graphics.h"
+
+namespace Maemo {
+
+/**
+ * SDL events manager for Maemo
+ */
+class MaemoSdlEventSource : public SdlEventSource {
+public:
+ MaemoSdlEventSource();
+protected:
+ virtual bool remapKey(SDL_Event &ev, Common::Event &event);
+ virtual bool handleMouseButtonDown(SDL_Event &ev, Common::Event &event);
+ virtual bool handleMouseButtonUp(SDL_Event &ev, Common::Event &event);
+
+ bool _clickEnabled;
+};
+
+} // namespace Maemo
+
+#endif // include guard
+
+#endif // if defined(MAEMO)
diff --git a/backends/events/openpandora/op-events.cpp b/backends/events/openpandora/op-events.cpp
index 72bc56c95d..c1d6362fcb 100644
--- a/backends/events/openpandora/op-events.cpp
+++ b/backends/events/openpandora/op-events.cpp
@@ -38,23 +38,23 @@
#include "common/events.h"
/* Quick default button states for modifiers. */
-int BUTTON_STATE_L = false;
+int BUTTON_STATE_L = false;
enum {
/* Touchscreen TapMode */
- TAPMODE_LEFT = 0,
- TAPMODE_RIGHT = 1,
- TAPMODE_HOVER = 2
+ TAPMODE_LEFT = 0,
+ TAPMODE_RIGHT = 1,
+ TAPMODE_HOVER = 2
};
OPEventSource::OPEventSource()
- : _buttonStateL(false){
+ : _buttonStateL(false) {
}
/* Custom handleMouseButtonDown/handleMouseButtonUp to deal with 'Tap Mode' for the touchscreen */
bool OPEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) {
- if (ev.button.button == SDL_BUTTON_LEFT){
+ if (ev.button.button == SDL_BUTTON_LEFT) {
if (BUTTON_STATE_L == true) /* BUTTON_STATE_L = Left Trigger Held, force Right Click */
event.type = Common::EVENT_RBUTTONDOWN;
else if (OP::tapmodeLevel == TAPMODE_LEFT) /* TAPMODE_LEFT = Left Click Tap Mode */
@@ -65,8 +65,7 @@ bool OPEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) {
event.type = Common::EVENT_MOUSEMOVE;
else
event.type = Common::EVENT_LBUTTONDOWN; /* For normal mice etc. */
- }
- else if (ev.button.button == SDL_BUTTON_RIGHT)
+ } else if (ev.button.button == SDL_BUTTON_RIGHT)
event.type = Common::EVENT_RBUTTONDOWN;
#if defined(SDL_BUTTON_WHEELUP) && defined(SDL_BUTTON_WHEELDOWN)
else if (ev.button.button == SDL_BUTTON_WHEELUP)
@@ -81,13 +80,13 @@ bool OPEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) {
else
return false;
- fillMouseEvent(event, ev.button.x, ev.button.y);
+ processMouseEvent(event, ev.button.x, ev.button.y);
return true;
}
bool OPEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) {
- if (ev.button.button == SDL_BUTTON_LEFT){
+ if (ev.button.button == SDL_BUTTON_LEFT) {
if (BUTTON_STATE_L == true) /* BUTTON_STATE_L = Left Trigger Held, force Right Click */
event.type = Common::EVENT_RBUTTONUP;
else if (OP::tapmodeLevel == TAPMODE_LEFT) /* TAPMODE_LEFT = Left Click Tap Mode */
@@ -98,8 +97,7 @@ bool OPEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) {
event.type = Common::EVENT_MOUSEMOVE;
else
event.type = Common::EVENT_LBUTTONUP; /* For normal mice etc. */
- }
- else if (ev.button.button == SDL_BUTTON_RIGHT)
+ } else if (ev.button.button == SDL_BUTTON_RIGHT)
event.type = Common::EVENT_RBUTTONUP;
#if defined(SDL_BUTTON_MIDDLE)
else if (ev.button.button == SDL_BUTTON_MIDDLE)
@@ -108,7 +106,7 @@ bool OPEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) {
else
return false;
- fillMouseEvent(event, ev.button.x, ev.button.y);
+ processMouseEvent(event, ev.button.x, ev.button.y);
return true;
}
@@ -123,12 +121,12 @@ bool OPEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
switch (ev.key.keysym.sym) {
case SDLK_HOME:
event.type = Common::EVENT_LBUTTONDOWN;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
break;
case SDLK_END:
event.type = Common::EVENT_RBUTTONDOWN;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
break;
case SDLK_PAGEDOWN:
@@ -159,12 +157,12 @@ bool OPEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
switch (ev.key.keysym.sym) {
case SDLK_HOME:
event.type = Common::EVENT_LBUTTONUP;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
break;
case SDLK_END:
event.type = Common::EVENT_RBUTTONUP;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
break;
case SDLK_PAGEDOWN:
diff --git a/backends/events/ps3sdl/ps3sdl-events.cpp b/backends/events/ps3sdl/ps3sdl-events.cpp
new file mode 100644
index 0000000000..723942af11
--- /dev/null
+++ b/backends/events/ps3sdl/ps3sdl-events.cpp
@@ -0,0 +1,163 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/scummsys.h"
+
+#if defined(PLAYSTATION3)
+
+#include "backends/events/ps3sdl/ps3sdl-events.h"
+#include "backends/platform/sdl/sdl.h"
+#include "engines/engine.h"
+
+#include "common/util.h"
+#include "common/events.h"
+
+enum {
+ BTN_LEFT = 0,
+ BTN_DOWN = 1,
+ BTN_RIGHT = 2,
+ BTN_UP = 3,
+
+ BTN_START = 4,
+ BTN_R3 = 5,
+ BTN_L3 = 6,
+ BTN_SELECT = 7,
+
+ BTN_SQUARE = 8,
+ BTN_CROSS = 9,
+ BTN_CIRCLE = 10,
+ BTN_TRIANGLE = 11,
+
+ BTN_R1 = 12,
+ BTN_L1 = 13,
+ BTN_R2 = 14,
+ BTN_L2 = 15
+};
+
+bool PS3SdlEventSource::handleJoyButtonDown(SDL_Event &ev, Common::Event &event) {
+
+ event.kbd.flags = 0;
+
+ switch (ev.jbutton.button) {
+ case BTN_CROSS: // Left mouse button
+ event.type = Common::EVENT_LBUTTONDOWN;
+ processMouseEvent(event, _km.x, _km.y);
+ break;
+ case BTN_CIRCLE: // Right mouse button
+ event.type = Common::EVENT_RBUTTONDOWN;
+ processMouseEvent(event, _km.x, _km.y);
+ break;
+ case BTN_TRIANGLE: // Game menu
+ event.type = Common::EVENT_KEYDOWN;
+ event.kbd.keycode = Common::KEYCODE_F5;
+ event.kbd.ascii = mapKey(SDLK_F5, (SDLMod) ev.key.keysym.mod, 0);
+ break;
+ case BTN_SELECT: // Virtual keyboard
+ event.type = Common::EVENT_KEYDOWN;
+ event.kbd.keycode = Common::KEYCODE_F7;
+ event.kbd.ascii = mapKey(SDLK_F7, (SDLMod) ev.key.keysym.mod, 0);
+ break;
+ case BTN_SQUARE: // Escape
+ event.type = Common::EVENT_KEYDOWN;
+ event.kbd.keycode = Common::KEYCODE_ESCAPE;
+ event.kbd.ascii = mapKey(SDLK_ESCAPE, (SDLMod) ev.key.keysym.mod, 0);
+ break;
+ case BTN_L1: // Predictive input dialog
+ event.type = Common::EVENT_PREDICTIVE_DIALOG;
+ break;
+ case BTN_START: // ScummVM in game menu
+ event.type = Common::EVENT_MAINMENU;
+ break;
+ }
+ return true;
+}
+
+bool PS3SdlEventSource::handleJoyButtonUp(SDL_Event &ev, Common::Event &event) {
+
+ event.kbd.flags = 0;
+
+ switch (ev.jbutton.button) {
+ case BTN_CROSS: // Left mouse button
+ event.type = Common::EVENT_LBUTTONUP;
+ processMouseEvent(event, _km.x, _km.y);
+ break;
+ case BTN_CIRCLE: // Right mouse button
+ event.type = Common::EVENT_RBUTTONUP;
+ processMouseEvent(event, _km.x, _km.y);
+ break;
+ case BTN_TRIANGLE: // Game menu
+ event.type = Common::EVENT_KEYUP;
+ event.kbd.keycode = Common::KEYCODE_F5;
+ event.kbd.ascii = mapKey(SDLK_F5, (SDLMod) ev.key.keysym.mod, 0);
+ break;
+ case BTN_SELECT: // Virtual keyboard
+ event.type = Common::EVENT_KEYUP;
+ event.kbd.keycode = Common::KEYCODE_F7;
+ event.kbd.ascii = mapKey(SDLK_F7, (SDLMod) ev.key.keysym.mod, 0);
+ break;
+ case BTN_SQUARE: // Escape
+ event.type = Common::EVENT_KEYUP;
+ event.kbd.keycode = Common::KEYCODE_ESCAPE;
+ event.kbd.ascii = mapKey(SDLK_ESCAPE, (SDLMod) ev.key.keysym.mod, 0);
+ break;
+ }
+ return true;
+}
+
+/**
+ * The XMB (PS3 in game menu) needs the screen buffers to be constantly flip while open.
+ * This pauses execution and keeps redrawing the screen until the XMB is closed.
+ */
+void PS3SdlEventSource::preprocessEvents(SDL_Event *event) {
+ if (event->type == SDL_ACTIVEEVENT) {
+ if (event->active.state == SDL_APPMOUSEFOCUS && !event->active.gain) {
+ // XMB opened
+ if (g_engine)
+ g_engine->pauseEngine(true);
+
+ for (;;) {
+ if (!SDL_PollEvent(event)) {
+ // Locking the screen forces a full redraw
+ Graphics::Surface* screen = g_system->lockScreen();
+ if (screen) {
+ g_system->unlockScreen();
+ g_system->updateScreen();
+ }
+ SDL_Delay(10);
+ continue;
+ }
+ if (event->type == SDL_QUIT)
+ return;
+ if (event->type != SDL_ACTIVEEVENT)
+ continue;
+ if (event->active.state == SDL_APPMOUSEFOCUS && event->active.gain) {
+ // XMB closed
+ if (g_engine)
+ g_engine->pauseEngine(false);
+ return;
+ }
+ }
+ }
+ }
+}
+
+#endif
diff --git a/backends/events/ps3sdl/ps3sdl-events.h b/backends/events/ps3sdl/ps3sdl-events.h
new file mode 100644
index 0000000000..8cf2f43426
--- /dev/null
+++ b/backends/events/ps3sdl/ps3sdl-events.h
@@ -0,0 +1,38 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#if !defined(BACKEND_EVENTS_PS3_H) && !defined(DISABLE_DEFAULT_EVENTMANAGER)
+#define BACKEND_EVENTS_PS3_H
+
+#include "backends/events/sdl/sdl-events.h"
+
+/**
+ * SDL Events manager for the PS3.
+ */
+class PS3SdlEventSource : public SdlEventSource {
+protected:
+ void preprocessEvents(SDL_Event *event);
+ bool handleJoyButtonDown(SDL_Event &ev, Common::Event &event);
+ bool handleJoyButtonUp(SDL_Event &ev, Common::Event &event);
+};
+
+#endif /* BACKEND_EVENTS_PS3_H */
diff --git a/backends/events/sdl/sdl-events.cpp b/backends/events/sdl/sdl-events.cpp
index 835d98e718..f94171646a 100644
--- a/backends/events/sdl/sdl-events.cpp
+++ b/backends/events/sdl/sdl-events.cpp
@@ -50,7 +50,7 @@
#define JOY_BUT_F5 5
SdlEventSource::SdlEventSource()
- : _scrollLock(false), _joystick(0), _lastScreenID(0), EventSource() {
+ : EventSource(), _scrollLock(false), _joystick(0), _lastScreenID(0), _graphicsManager(0) {
// Reset mouse state
memset(&_km, 0, sizeof(_km));
@@ -91,10 +91,15 @@ int SdlEventSource::mapKey(SDLKey key, SDLMod mod, Uint16 unicode) {
return key;
}
-void SdlEventSource::fillMouseEvent(Common::Event &event, int x, int y) {
+void SdlEventSource::processMouseEvent(Common::Event &event, int x, int y) {
event.mouse.x = x;
event.mouse.y = y;
+ if (_graphicsManager) {
+ _graphicsManager->notifyMousePos(Common::Point(x, y));
+ _graphicsManager->transformMouseCoordinates(event.mouse);
+ }
+
// Update the "keyboard mouse" coords
_km.x = x;
_km.y = y;
@@ -194,6 +199,149 @@ void SdlEventSource::SDLModToOSystemKeyFlags(SDLMod mod, Common::Event &event) {
event.kbd.flags |= Common::KBD_CAPS;
}
+Common::KeyCode SdlEventSource::SDLToOSystemKeycode(const SDLKey key) {
+ switch (key) {
+ case SDLK_BACKSPACE: return Common::KEYCODE_BACKSPACE;
+ case SDLK_TAB: return Common::KEYCODE_TAB;
+ case SDLK_CLEAR: return Common::KEYCODE_CLEAR;
+ case SDLK_RETURN: return Common::KEYCODE_RETURN;
+ case SDLK_PAUSE: return Common::KEYCODE_PAUSE;
+ case SDLK_ESCAPE: return Common::KEYCODE_ESCAPE;
+ case SDLK_SPACE: return Common::KEYCODE_SPACE;
+ case SDLK_EXCLAIM: return Common::KEYCODE_EXCLAIM;
+ case SDLK_QUOTEDBL: return Common::KEYCODE_QUOTEDBL;
+ case SDLK_HASH: return Common::KEYCODE_HASH;
+ case SDLK_DOLLAR: return Common::KEYCODE_DOLLAR;
+ case SDLK_AMPERSAND: return Common::KEYCODE_AMPERSAND;
+ case SDLK_QUOTE: return Common::KEYCODE_QUOTE;
+ case SDLK_LEFTPAREN: return Common::KEYCODE_LEFTPAREN;
+ case SDLK_RIGHTPAREN: return Common::KEYCODE_RIGHTPAREN;
+ case SDLK_ASTERISK: return Common::KEYCODE_ASTERISK;
+ case SDLK_PLUS: return Common::KEYCODE_PLUS;
+ case SDLK_COMMA: return Common::KEYCODE_COMMA;
+ case SDLK_MINUS: return Common::KEYCODE_MINUS;
+ case SDLK_PERIOD: return Common::KEYCODE_PERIOD;
+ case SDLK_SLASH: return Common::KEYCODE_SLASH;
+ case SDLK_0: return Common::KEYCODE_0;
+ case SDLK_1: return Common::KEYCODE_1;
+ case SDLK_2: return Common::KEYCODE_2;
+ case SDLK_3: return Common::KEYCODE_3;
+ case SDLK_4: return Common::KEYCODE_4;
+ case SDLK_5: return Common::KEYCODE_5;
+ case SDLK_6: return Common::KEYCODE_6;
+ case SDLK_7: return Common::KEYCODE_7;
+ case SDLK_8: return Common::KEYCODE_8;
+ case SDLK_9: return Common::KEYCODE_9;
+ case SDLK_COLON: return Common::KEYCODE_COLON;
+ case SDLK_SEMICOLON: return Common::KEYCODE_SEMICOLON;
+ case SDLK_LESS: return Common::KEYCODE_LESS;
+ case SDLK_EQUALS: return Common::KEYCODE_EQUALS;
+ case SDLK_GREATER: return Common::KEYCODE_GREATER;
+ case SDLK_QUESTION: return Common::KEYCODE_QUESTION;
+ case SDLK_AT: return Common::KEYCODE_AT;
+ case SDLK_LEFTBRACKET: return Common::KEYCODE_LEFTBRACKET;
+ case SDLK_BACKSLASH: return Common::KEYCODE_BACKSLASH;
+ case SDLK_RIGHTBRACKET: return Common::KEYCODE_RIGHTBRACKET;
+ case SDLK_CARET: return Common::KEYCODE_CARET;
+ case SDLK_UNDERSCORE: return Common::KEYCODE_UNDERSCORE;
+ case SDLK_BACKQUOTE: return Common::KEYCODE_BACKQUOTE;
+ case SDLK_a: return Common::KEYCODE_a;
+ case SDLK_b: return Common::KEYCODE_b;
+ case SDLK_c: return Common::KEYCODE_c;
+ case SDLK_d: return Common::KEYCODE_d;
+ case SDLK_e: return Common::KEYCODE_e;
+ case SDLK_f: return Common::KEYCODE_f;
+ case SDLK_g: return Common::KEYCODE_g;
+ case SDLK_h: return Common::KEYCODE_h;
+ case SDLK_i: return Common::KEYCODE_i;
+ case SDLK_j: return Common::KEYCODE_j;
+ case SDLK_k: return Common::KEYCODE_k;
+ case SDLK_l: return Common::KEYCODE_l;
+ case SDLK_m: return Common::KEYCODE_m;
+ case SDLK_n: return Common::KEYCODE_n;
+ case SDLK_o: return Common::KEYCODE_o;
+ case SDLK_p: return Common::KEYCODE_p;
+ case SDLK_q: return Common::KEYCODE_q;
+ case SDLK_r: return Common::KEYCODE_r;
+ case SDLK_s: return Common::KEYCODE_s;
+ case SDLK_t: return Common::KEYCODE_t;
+ case SDLK_u: return Common::KEYCODE_u;
+ case SDLK_v: return Common::KEYCODE_v;
+ case SDLK_w: return Common::KEYCODE_w;
+ case SDLK_x: return Common::KEYCODE_x;
+ case SDLK_y: return Common::KEYCODE_y;
+ case SDLK_z: return Common::KEYCODE_z;
+ case SDLK_DELETE: return Common::KEYCODE_DELETE;
+#if SDL_VERSION_ATLEAST(1, 3, 0)
+ case SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_GRAVE): return Common::KEYCODE_TILDE;
+#else
+ case SDLK_WORLD_16: return Common::KEYCODE_TILDE;
+#endif
+ case SDLK_KP0: return Common::KEYCODE_KP0;
+ case SDLK_KP1: return Common::KEYCODE_KP1;
+ case SDLK_KP2: return Common::KEYCODE_KP2;
+ case SDLK_KP3: return Common::KEYCODE_KP3;
+ case SDLK_KP4: return Common::KEYCODE_KP4;
+ case SDLK_KP5: return Common::KEYCODE_KP5;
+ case SDLK_KP6: return Common::KEYCODE_KP6;
+ case SDLK_KP7: return Common::KEYCODE_KP7;
+ case SDLK_KP8: return Common::KEYCODE_KP8;
+ case SDLK_KP9: return Common::KEYCODE_KP9;
+ case SDLK_KP_PERIOD: return Common::KEYCODE_KP_PERIOD;
+ case SDLK_KP_DIVIDE: return Common::KEYCODE_KP_DIVIDE;
+ case SDLK_KP_MULTIPLY: return Common::KEYCODE_KP_MULTIPLY;
+ case SDLK_KP_MINUS: return Common::KEYCODE_KP_MINUS;
+ case SDLK_KP_PLUS: return Common::KEYCODE_KP_PLUS;
+ case SDLK_KP_ENTER: return Common::KEYCODE_KP_ENTER;
+ case SDLK_KP_EQUALS: return Common::KEYCODE_KP_EQUALS;
+ case SDLK_UP: return Common::KEYCODE_UP;
+ case SDLK_DOWN: return Common::KEYCODE_DOWN;
+ case SDLK_RIGHT: return Common::KEYCODE_RIGHT;
+ case SDLK_LEFT: return Common::KEYCODE_LEFT;
+ case SDLK_INSERT: return Common::KEYCODE_INSERT;
+ case SDLK_HOME: return Common::KEYCODE_HOME;
+ case SDLK_END: return Common::KEYCODE_END;
+ case SDLK_PAGEUP: return Common::KEYCODE_PAGEUP;
+ case SDLK_PAGEDOWN: return Common::KEYCODE_PAGEDOWN;
+ case SDLK_F1: return Common::KEYCODE_F1;
+ case SDLK_F2: return Common::KEYCODE_F2;
+ case SDLK_F3: return Common::KEYCODE_F3;
+ case SDLK_F4: return Common::KEYCODE_F4;
+ case SDLK_F5: return Common::KEYCODE_F5;
+ case SDLK_F6: return Common::KEYCODE_F6;
+ case SDLK_F7: return Common::KEYCODE_F7;
+ case SDLK_F8: return Common::KEYCODE_F8;
+ case SDLK_F9: return Common::KEYCODE_F9;
+ case SDLK_F10: return Common::KEYCODE_F10;
+ case SDLK_F11: return Common::KEYCODE_F11;
+ case SDLK_F12: return Common::KEYCODE_F12;
+ case SDLK_F13: return Common::KEYCODE_F13;
+ case SDLK_F14: return Common::KEYCODE_F14;
+ case SDLK_F15: return Common::KEYCODE_F15;
+ case SDLK_NUMLOCK: return Common::KEYCODE_NUMLOCK;
+ case SDLK_CAPSLOCK: return Common::KEYCODE_CAPSLOCK;
+ case SDLK_SCROLLOCK: return Common::KEYCODE_SCROLLOCK;
+ case SDLK_RSHIFT: return Common::KEYCODE_RSHIFT;
+ case SDLK_LSHIFT: return Common::KEYCODE_LSHIFT;
+ case SDLK_RCTRL: return Common::KEYCODE_RCTRL;
+ case SDLK_LCTRL: return Common::KEYCODE_LCTRL;
+ case SDLK_RALT: return Common::KEYCODE_RALT;
+ case SDLK_LALT: return Common::KEYCODE_LALT;
+ case SDLK_LSUPER: return Common::KEYCODE_LSUPER;
+ case SDLK_RSUPER: return Common::KEYCODE_RSUPER;
+ case SDLK_MODE: return Common::KEYCODE_MODE;
+ case SDLK_COMPOSE: return Common::KEYCODE_COMPOSE;
+ case SDLK_HELP: return Common::KEYCODE_HELP;
+ case SDLK_PRINT: return Common::KEYCODE_PRINT;
+ case SDLK_SYSREQ: return Common::KEYCODE_SYSREQ;
+ case SDLK_BREAK: return Common::KEYCODE_BREAK;
+ case SDLK_MENU: return Common::KEYCODE_MENU;
+ case SDLK_POWER: return Common::KEYCODE_POWER;
+ case SDLK_UNDO: return Common::KEYCODE_UNDO;
+ default: return Common::KEYCODE_INVALID;
+ }
+}
+
bool SdlEventSource::pollEvent(Common::Event &event) {
handleKbdMouse();
@@ -206,7 +354,6 @@ bool SdlEventSource::pollEvent(Common::Event &event) {
}
SDL_Event ev;
- ev.type = SDL_NOEVENT;
while (SDL_PollEvent(&ev)) {
preprocessEvents(&ev);
if (dispatchSDLEvent(ev, event))
@@ -235,16 +382,14 @@ bool SdlEventSource::dispatchSDLEvent(SDL_Event &ev, Common::Event &event) {
return handleJoyAxisMotion(ev, event);
case SDL_VIDEOEXPOSE:
- // HACK: Send a fake event, handled by SdlGraphicsManager
- event.type = (Common::EventType)OSystem_SDL::kSdlEventExpose;
- return true;
+ if (_graphicsManager)
+ _graphicsManager->notifyVideoExpose();
+ return false;
case SDL_VIDEORESIZE:
- // HACK: Send a fake event, handled by OpenGLSdlGraphicsManager
- event.type = (Common::EventType)OSystem_SDL::kSdlEventResize;
- event.mouse.x = ev.resize.w;
- event.mouse.y = ev.resize.h;
- return true;
+ if (_graphicsManager)
+ _graphicsManager->notifyResize(ev.resize.w, ev.resize.h);
+ return false;
case SDL_QUIT:
event.type = Common::EVENT_QUIT;
@@ -291,6 +436,14 @@ bool SdlEventSource::handleKeyDown(SDL_Event &ev, Common::Event &event) {
event.type = Common::EVENT_QUIT;
return true;
}
+
+ #ifdef WIN32
+ // On Windows, also use the default Alt-F4 quit combination
+ if ((ev.key.keysym.mod & KMOD_ALT) && ev.key.keysym.sym == SDLK_F4) {
+ event.type = Common::EVENT_QUIT;
+ return true;
+ }
+ #endif
#endif
// Ctrl-u toggles mute
@@ -303,8 +456,8 @@ bool SdlEventSource::handleKeyDown(SDL_Event &ev, Common::Event &event) {
return true;
event.type = Common::EVENT_KEYDOWN;
- event.kbd.keycode = (Common::KeyCode)ev.key.keysym.sym;
- event.kbd.ascii = mapKey(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode);
+ event.kbd.keycode = SDLToOSystemKeycode(ev.key.keysym.sym);
+ event.kbd.ascii = mapKey(ev.key.keysym.sym, (SDLMod)ev.key.keysym.mod, (Uint16)ev.key.keysym.unicode);
return true;
}
@@ -347,8 +500,8 @@ bool SdlEventSource::handleKeyUp(SDL_Event &ev, Common::Event &event) {
// continue normally
event.type = Common::EVENT_KEYUP;
- event.kbd.keycode = (Common::KeyCode)ev.key.keysym.sym;
- event.kbd.ascii = mapKey(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode);
+ event.kbd.keycode = SDLToOSystemKeycode(ev.key.keysym.sym);
+ event.kbd.ascii = mapKey(ev.key.keysym.sym, (SDLMod)ev.key.keysym.mod, (Uint16)ev.key.keysym.unicode);
// Ctrl-Alt-<key> will change the GFX mode
SDLModToOSystemKeyFlags(mod, event);
@@ -362,7 +515,7 @@ bool SdlEventSource::handleKeyUp(SDL_Event &ev, Common::Event &event) {
bool SdlEventSource::handleMouseMotion(SDL_Event &ev, Common::Event &event) {
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, ev.motion.x, ev.motion.y);
+ processMouseEvent(event, ev.motion.x, ev.motion.y);
return true;
}
@@ -385,7 +538,7 @@ bool SdlEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event)
else
return false;
- fillMouseEvent(event, ev.button.x, ev.button.y);
+ processMouseEvent(event, ev.button.x, ev.button.y);
return true;
}
@@ -401,7 +554,7 @@ bool SdlEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) {
#endif
else
return false;
- fillMouseEvent(event, ev.button.x, ev.button.y);
+ processMouseEvent(event, ev.button.x, ev.button.y);
return true;
}
@@ -409,28 +562,28 @@ bool SdlEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) {
bool SdlEventSource::handleJoyButtonDown(SDL_Event &ev, Common::Event &event) {
if (ev.jbutton.button == JOY_BUT_LMOUSE) {
event.type = Common::EVENT_LBUTTONDOWN;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
} else if (ev.jbutton.button == JOY_BUT_RMOUSE) {
event.type = Common::EVENT_RBUTTONDOWN;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
} else {
event.type = Common::EVENT_KEYDOWN;
switch (ev.jbutton.button) {
case JOY_BUT_ESCAPE:
event.kbd.keycode = Common::KEYCODE_ESCAPE;
- event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0);
+ event.kbd.ascii = mapKey(SDLK_ESCAPE, (SDLMod)ev.key.keysym.mod, 0);
break;
case JOY_BUT_PERIOD:
event.kbd.keycode = Common::KEYCODE_PERIOD;
- event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0);
+ event.kbd.ascii = mapKey(SDLK_PERIOD, (SDLMod)ev.key.keysym.mod, 0);
break;
case JOY_BUT_SPACE:
event.kbd.keycode = Common::KEYCODE_SPACE;
- event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
+ event.kbd.ascii = mapKey(SDLK_SPACE, (SDLMod)ev.key.keysym.mod, 0);
break;
case JOY_BUT_F5:
event.kbd.keycode = Common::KEYCODE_F5;
- event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
+ event.kbd.ascii = mapKey(SDLK_F5, (SDLMod)ev.key.keysym.mod, 0);
break;
}
}
@@ -440,28 +593,28 @@ bool SdlEventSource::handleJoyButtonDown(SDL_Event &ev, Common::Event &event) {
bool SdlEventSource::handleJoyButtonUp(SDL_Event &ev, Common::Event &event) {
if (ev.jbutton.button == JOY_BUT_LMOUSE) {
event.type = Common::EVENT_LBUTTONUP;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
} else if (ev.jbutton.button == JOY_BUT_RMOUSE) {
event.type = Common::EVENT_RBUTTONUP;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
} else {
event.type = Common::EVENT_KEYUP;
switch (ev.jbutton.button) {
case JOY_BUT_ESCAPE:
event.kbd.keycode = Common::KEYCODE_ESCAPE;
- event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0);
+ event.kbd.ascii = mapKey(SDLK_ESCAPE, (SDLMod)ev.key.keysym.mod, 0);
break;
case JOY_BUT_PERIOD:
event.kbd.keycode = Common::KEYCODE_PERIOD;
- event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0);
+ event.kbd.ascii = mapKey(SDLK_PERIOD, (SDLMod)ev.key.keysym.mod, 0);
break;
case JOY_BUT_SPACE:
event.kbd.keycode = Common::KEYCODE_SPACE;
- event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
+ event.kbd.ascii = mapKey(SDLK_SPACE, (SDLMod)ev.key.keysym.mod, 0);
break;
case JOY_BUT_F5:
event.kbd.keycode = Common::KEYCODE_F5;
- event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
+ event.kbd.ascii = mapKey(SDLK_F5, (SDLMod)ev.key.keysym.mod, 0);
break;
}
}
@@ -511,7 +664,7 @@ bool SdlEventSource::handleJoyAxisMotion(SDL_Event &ev, Common::Event &event) {
#endif
}
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
}
diff --git a/backends/events/sdl/sdl-events.h b/backends/events/sdl/sdl-events.h
index 805b76b108..2ba88c702b 100644
--- a/backends/events/sdl/sdl-events.h
+++ b/backends/events/sdl/sdl-events.h
@@ -24,6 +24,7 @@
#define BACKEND_EVENTS_SDL_H
#include "backends/platform/sdl/sdl-sys.h"
+#include "backends/graphics/sdl/sdl-graphics.h"
#include "common/events.h"
@@ -36,6 +37,8 @@ public:
SdlEventSource();
virtual ~SdlEventSource();
+ void setGraphicsManager(SdlGraphicsManager *gMan) { _graphicsManager = gMan; }
+
/**
* Gets and processes SDL events.
*/
@@ -77,6 +80,11 @@ protected:
int _lastScreenID;
/**
+ * The associated graphics manager.
+ */
+ SdlGraphicsManager *_graphicsManager;
+
+ /**
* Pre process an event before it is dispatched.
*/
virtual void preprocessEvents(SDL_Event *event) {}
@@ -108,9 +116,10 @@ protected:
//@}
/**
- * Assigns the mouse coords to the mouse event
+ * Assigns the mouse coords to the mouse event. Furthermore notify the
+ * graphics manager about the position change.
*/
- virtual void fillMouseEvent(Common::Event &event, int x, int y);
+ virtual void processMouseEvent(Common::Event &event, int x, int y);
/**
* Remaps key events. This allows platforms to configure
@@ -127,6 +136,11 @@ protected:
* Configures the key modifiers flags status
*/
virtual void SDLModToOSystemKeyFlags(SDLMod mod, Common::Event &event);
+
+ /**
+ * Translates SDL key codes to OSystem key codes
+ */
+ Common::KeyCode SDLToOSystemKeycode(const SDLKey key);
};
#endif
diff --git a/backends/events/symbiansdl/symbiansdl-events.cpp b/backends/events/symbiansdl/symbiansdl-events.cpp
index 40bd89b8dc..308621e697 100644
--- a/backends/events/symbiansdl/symbiansdl-events.cpp
+++ b/backends/events/symbiansdl/symbiansdl-events.cpp
@@ -63,7 +63,7 @@ bool SymbianSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
_km.y_down_count = 0;
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
@@ -76,7 +76,7 @@ bool SymbianSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
_km.y_down_count = 0;
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
@@ -89,7 +89,7 @@ bool SymbianSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
_km.x_down_count = 0;
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
@@ -102,19 +102,19 @@ bool SymbianSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
_km.x_down_count = 0;
}
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
case GUI::ACTION_LEFTCLICK:
event.type = (ev.type == SDL_KEYDOWN ? Common::EVENT_LBUTTONDOWN : Common::EVENT_LBUTTONUP);
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
case GUI::ACTION_RIGHTCLICK:
event.type = (ev.type == SDL_KEYDOWN ? Common::EVENT_RBUTTONDOWN : Common::EVENT_RBUTTONUP);
- fillMouseEvent(event, _km.x, _km.y);
+ processMouseEvent(event, _km.x, _km.y);
return true;
@@ -132,7 +132,7 @@ bool SymbianSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
if (_currentZone >= TOTAL_ZONES)
_currentZone = 0;
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, _mouseXZone[_currentZone], _mouseYZone[_currentZone]);
+ processMouseEvent(event, _mouseXZone[_currentZone], _mouseYZone[_currentZone]);
SDL_WarpMouse(event.mouse.x, event.mouse.y);
}
@@ -195,4 +195,3 @@ bool SymbianSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) {
}
#endif
-
diff --git a/backends/events/symbiansdl/symbiansdl-events.h b/backends/events/symbiansdl/symbiansdl-events.h
index 7186fc9116..66c0b451eb 100644
--- a/backends/events/symbiansdl/symbiansdl-events.h
+++ b/backends/events/symbiansdl/symbiansdl-events.h
@@ -53,4 +53,3 @@ protected:
};
#endif
-
diff --git a/backends/events/webossdl/webossdl-events.cpp b/backends/events/webossdl/webossdl-events.cpp
index 102eb5802e..d01e51fafe 100644
--- a/backends/events/webossdl/webossdl-events.cpp
+++ b/backends/events/webossdl/webossdl-events.cpp
@@ -22,55 +22,17 @@
#ifdef WEBOS
-// Allow use of stuff in <time.h>
-#define FORBIDDEN_SYMBOL_EXCEPTION_time_h
-
#include "common/scummsys.h"
#include "common/system.h"
-#include "sys/time.h"
-#include "time.h"
+#include "common/str.h"
+#include "common/translation.h"
#include "backends/events/webossdl/webossdl-events.h"
#include "gui/message.h"
+#include "engines/engine.h"
-// Inidicates if gesture area is pressed down or not.
-static bool gestureDown = false;
-
-// The timestamp when screen was pressed down.
-static int screenDownTime = 0;
-
-// The timestamp when a possible drag operation was triggered.
-static int dragStartTime = 0;
-
-// The index of the motion pointer.
-static int motionPtrIndex = -1;
-
-// The maximum horizontal motion during dragging (For tap recognition).
-static int dragDiffX = 0;
-
-// The maximum vertical motion during dragging (For tap recognition).
-static int dragDiffY = 0;
-
-// Indicates if we are in drag mode.
-static bool dragging = false;
-
-// The current mouse position on the screen.
-static int curX = 0, curY = 0;
-
-// The time (seconds after 1/1/1970) when program started.
-static time_t programStartTime = time(0);
-
-/**
- * Returns the number of passed milliseconds since program start.
- *
- * @return The number of passed milliseconds.
- */
-static time_t getMillis()
-{
- struct timeval tv;
- gettimeofday(&tv, NULL);
- return (time(0) - programStartTime) * 1000 + tv.tv_usec / 1000;
-}
+// PDL.h provided by the official Palm WebOS PDK.
+#include <PDL.h>
/**
* WebOS devices only have a Shift key and a CTRL key. There is also an Alt
@@ -91,7 +53,7 @@ void WebOSSdlEventSource::SDLModToOSystemKeyFlags(SDLMod mod,
event.kbd.flags |= Common::KBD_CTRL;
// Holding down the gesture area emulates the ALT key
- if (gestureDown)
+ if (_gestureDown)
event.kbd.flags |= Common::KBD_ALT;
}
@@ -106,7 +68,7 @@ void WebOSSdlEventSource::SDLModToOSystemKeyFlags(SDLMod mod,
bool WebOSSdlEventSource::handleKeyDown(SDL_Event &ev, Common::Event &event) {
// Handle gesture area tap.
if (ev.key.keysym.sym == SDLK_WORLD_71) {
- gestureDown = true;
+ _gestureDown = true;
return true;
}
@@ -115,7 +77,18 @@ bool WebOSSdlEventSource::handleKeyDown(SDL_Event &ev, Common::Event &event) {
// gesture tap AFTER the backward gesture event and not BEFORE (Like
// WebOS 2).
if (ev.key.keysym.sym == 27 || ev.key.keysym.sym == 229) {
- gestureDown = false;
+ _gestureDown = false;
+ }
+
+ // handle virtual keyboard dismiss key
+ if (ev.key.keysym.sym == 24) {
+ int gblPDKVersion = PDL_GetPDKVersion();
+ // check for correct PDK Version, as this determines whether an
+ // OS-supplied virtual keyboard is available on this device.
+ if (gblPDKVersion >= 300) {
+ PDL_SetKeyboardState(PDL_FALSE);
+ return true;
+ }
}
// Call original SDL key handler.
@@ -133,10 +106,21 @@ bool WebOSSdlEventSource::handleKeyDown(SDL_Event &ev, Common::Event &event) {
bool WebOSSdlEventSource::handleKeyUp(SDL_Event &ev, Common::Event &event) {
// Handle gesture area tap.
if (ev.key.keysym.sym == SDLK_WORLD_71) {
- gestureDown = false;
+ _gestureDown = false;
return true;
}
+ // handle virtual keyboard dismiss key
+ if (ev.key.keysym.sym == 24) {
+ int gblPDKVersion = PDL_GetPDKVersion();
+ // check for correct PDK Version, as this determines whether an
+ // OS-supplied virtual keyboard is available on this device.
+ if (gblPDKVersion >= 300) {
+ PDL_SetKeyboardState(PDL_FALSE);
+ return true;
+ }
+ }
+
// Call original SDL key handler.
return SdlEventSource::handleKeyUp(ev, event);
}
@@ -148,19 +132,45 @@ bool WebOSSdlEventSource::handleKeyUp(SDL_Event &ev, Common::Event &event) {
* @param event The ScummVM event.
* @return True if event was processed, false if not.
*/
-bool WebOSSdlEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) {
- if (motionPtrIndex == -1) {
- motionPtrIndex = ev.button.which;
- dragDiffX = 0;
- dragDiffY = 0;
- screenDownTime = getMillis();
-
- // Start dragging when pressing the screen shortly after a tap.
- if (getMillis() - dragStartTime < 250) {
- dragging = true;
+bool WebOSSdlEventSource::handleMouseButtonDown(SDL_Event &ev,
+ Common::Event &event) {
+ _dragDiffX[ev.button.which] = 0;
+ _dragDiffY[ev.button.which] = 0;
+ _fingerDown[ev.button.which] = true;
+ _screenDownTime[ev.button.which] = g_system->getMillis();
+
+ if (ev.button.which == 0) {
+ // Do a click when the finger lifts unless we leave the range
+ _doClick = true;
+ // Queue up dragging if auto-drag mode is on
+ if (_autoDragMode)
+ _queuedDragTime = g_system->getMillis() + QUEUED_DRAG_DELAY;
+ // Turn drag mode on instantly for a double-tap
+ else if (g_system->getMillis() - _dragStartTime < DOUBLETAP_LIMIT) {
+ _dragging = true;
event.type = Common::EVENT_LBUTTONDOWN;
- fillMouseEvent(event, curX, curY);
+ processMouseEvent(event, _curX, _curY);
}
+ // If we're not in touchpad mode, move the cursor to the tap
+ if (!_touchpadMode) {
+ _curX = MIN(_screenX, MAX(0, 0 + ev.motion.x));
+ _curY = MIN(_screenY, MAX(0, 0 + ev.motion.y));
+ // If we're already clicking, hold it until after the move.
+ if (event.type == Common::EVENT_LBUTTONDOWN) {
+ processMouseEvent(event, _curX, _curY);
+ g_system->getEventManager()->pushEvent(event);
+ }
+ // Move the mouse
+ event.type = Common::EVENT_MOUSEMOVE;
+ processMouseEvent(event, _curX, _curY);
+ }
+ // Watch for a double-tap-triggered drag
+ _dragStartTime = g_system->getMillis();
+ } else if (ev.button.which == 1) {
+ // Kill any queued drag event if a second finger goes down
+ if (_queuedDragTime > 0)
+ _queuedDragTime = 0;
+ _doClick = false;
}
return true;
}
@@ -172,54 +182,48 @@ bool WebOSSdlEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &ev
* @param event The ScummVM event.
* @return True if event was processed, false if not.
*/
-bool WebOSSdlEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) {
- if (motionPtrIndex == ev.button.which) {
- motionPtrIndex = -1;
-
- // When drag mode was active then simply send a mouse up event
- if (dragging)
- {
+bool WebOSSdlEventSource::handleMouseButtonUp(SDL_Event &ev,
+ Common::Event &event) {
+ // Only react if the finger hasn't been virtually lifted already
+ if (_fingerDown[ev.button.which]) {
+ // No matter what, if it's the first finger that's lifted when
+ // we're dragging, just lift the mouse button.
+ if (ev.button.which == 0 && _dragging) {
event.type = Common::EVENT_LBUTTONUP;
- fillMouseEvent(event, curX, curY);
- dragging = false;
- return true;
- }
-
- // When mouse was moved 5 pixels or less then emulate a mouse button
- // click.
- if (ABS(dragDiffX) < 6 && ABS(dragDiffY) < 6)
- {
- int duration = getMillis() - screenDownTime;
-
- // When screen was pressed for less than 500ms then emulate a
- // left mouse click.
- if (duration < 500) {
+ processMouseEvent(event, _curX, _curY);
+ _dragging = false;
+ } else {
+ // If it was the first finger and the click hasn't been
+ // canceled, it's a click.
+ if (ev.button.which == 0 && _doClick &&
+ !_fingerDown[1] && !_fingerDown[2]) {
event.type = Common::EVENT_LBUTTONUP;
- fillMouseEvent(event, curX, curY);
+ processMouseEvent(event, _curX, _curY);
g_system->getEventManager()->pushEvent(event);
event.type = Common::EVENT_LBUTTONDOWN;
- dragStartTime = getMillis();
- }
-
- // When screen was pressed for less than 1000ms then emulate a
- // right mouse click.
- else if (duration < 1000) {
- event.type = Common::EVENT_RBUTTONUP;
- fillMouseEvent(event, curX, curY);
- g_system->getEventManager()->pushEvent(event);
+ if (_queuedDragTime > 0)
+ _queuedDragTime = 0;
+ } else if (ev.button.which == 1 &&
+ _fingerDown[0] && _fingerDown[1] && !_fingerDown[2]) {
+ // If the first finger's down and the second taps, it's a
+ // right mouse click.
event.type = Common::EVENT_RBUTTONDOWN;
- }
-
- // When screen was pressed for more than 1000ms then emulate a
- // middle mouse click.
- else {
+ processMouseEvent(event, _curX, _curY);
+ _queuedRUpTime = g_system->getMillis() + QUEUED_RUP_DELAY;
+ } else if (ev.button.which == 2 &&
+ _fingerDown[0] && _fingerDown[1]) {
+ // If two fingers are down and a third taps, it's a middle
+ // click -- but lift the second finger so it doesn't register
+ // as a right click.
event.type = Common::EVENT_MBUTTONUP;
- fillMouseEvent(event, curX, curY);
+ processMouseEvent(event, _curX, _curY);
g_system->getEventManager()->pushEvent(event);
event.type = Common::EVENT_MBUTTONDOWN;
+ _fingerDown[1] = false;
}
-
}
+ // Officially lift the finger that was raised.
+ _fingerDown[ev.button.which] = false;
}
return true;
}
@@ -231,18 +235,200 @@ bool WebOSSdlEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &even
* @param event The ScummVM event.
* @return True if event was processed, false if not.
*/
-bool WebOSSdlEventSource::handleMouseMotion(SDL_Event &ev, Common::Event &event) {
- if (ev.motion.which == motionPtrIndex) {
- int screenX = g_system->getWidth();
- int screenY = g_system->getHeight();
- curX = MIN(screenX, MAX(0, curX + ev.motion.xrel));
- curY = MIN(screenY, MAX(0, curY + ev.motion.yrel));
- dragDiffX += ev.motion.xrel;
- dragDiffY += ev.motion.yrel;
- event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, curX, curY);
+bool WebOSSdlEventSource::handleMouseMotion(SDL_Event &ev,
+ Common::Event &event) {
+ if (_fingerDown[ev.motion.which]) {
+ _dragDiffX[ev.motion.which] += ev.motion.xrel;
+ _dragDiffY[ev.motion.which] += ev.motion.yrel;
+
+ switch (ev.motion.which) {
+ case 0:
+ // If our dragDiff goes too many pixels in either direction,
+ // kill the future click and any queued drag event.
+ if (_doClick && (ABS(_dragDiffX[0]) > MOUSE_DEADZONE_PIXELS ||
+ ABS(_dragDiffY[0]) > MOUSE_DEADZONE_PIXELS)) {
+ _doClick = false;
+ if (_queuedDragTime > 0)
+ _queuedDragTime = 0;
+ }
+ // If only one finger is on the screen and moving, that's
+ // the mouse pointer.
+ if (!_fingerDown[1] && !_fingerDown[2]) {
+ if (_touchpadMode) {
+ _curX = MIN(_screenX, MAX(0, _curX + ev.motion.xrel));
+ _curY = MIN(_screenY, MAX(0, _curY + ev.motion.yrel));
+ } else {
+ _curX = MIN(_screenX, MAX(0, 0 + ev.motion.x));
+ _curY = MIN(_screenY, MAX(0, 0 + ev.motion.y));
+ }
+ event.type = Common::EVENT_MOUSEMOVE;
+ processMouseEvent(event, _curX, _curY);
+ }
+ break;
+ case 1:
+ // Check for a two-finger swipe
+ if (_fingerDown[0] && !_fingerDown[2]) {
+ // Check for a vertical swipe
+ if (ABS(_dragDiffY[0]) > _swipeDistY &&
+ ABS(_dragDiffY[1]) > _swipeDistY) {
+ // Virtually lift fingers to prevent repeat triggers
+ _fingerDown[0] = _fingerDown[1] = false;
+ if (_dragDiffY[0] < 0 && _dragDiffY[1] < 0) {
+ // A swipe up triggers the keyboard, if it exists. We
+ // test for existance of a virtual OS keyboard by
+ // checking for the version of the linked PDK libs.
+ int gblPDKVersion = PDL_GetPDKVersion();
+ if (gblPDKVersion >= 300)
+ PDL_SetKeyboardState(PDL_TRUE);
+ } else if (_dragDiffY[0] > 0 && _dragDiffY[1] > 0) {
+ // A swipe down triggers the menu
+ if (g_engine && !g_engine->isPaused())
+ g_engine->openMainMenuDialog();
+ }
+ return true;
+ }
+ // Check for a horizontal swipe
+ if (ABS(_dragDiffX[0]) > _swipeDistX &&
+ ABS(_dragDiffX[1]) > _swipeDistX) {
+ // Virtually lift fingers to prevent repeat triggers
+ _fingerDown[0] = _fingerDown[1] = false;
+ if (_dragDiffX[0] < 0 && _dragDiffX[1] < 0) {
+ // A swipe left presses escape
+ event.type = Common::EVENT_KEYDOWN;
+ event.kbd.flags = 0;
+ event.kbd.keycode = Common::KEYCODE_ESCAPE;
+ event.kbd.ascii = Common::ASCII_ESCAPE;
+ _queuedEscapeUpTime = g_system->getMillis() +
+ QUEUED_KEY_DELAY;
+ } else if (_dragDiffX[0] > 0 && _dragDiffX[1] > 0) {
+ // A swipe right toggles touchpad mode
+ _touchpadMode = !_touchpadMode;
+ g_system->showMouse(_touchpadMode);
+ // I18N: Touchpad mode toggle status.
+ Common::String dialogMsg(_("Touchpad mode is now"));
+ dialogMsg += " ";
+ // I18N: Touchpad mode on or off.
+ dialogMsg += (_touchpadMode ? _("ON") : _("OFF"));
+ dialogMsg += ".\n";
+ // I18N: Instructions to toggle Touchpad mode.
+ dialogMsg +=
+ _("Swipe two fingers to the right to toggle.");
+ GUI::TimedMessageDialog dialog(dialogMsg, 1500);
+ dialog.runModal();
+ }
+ return true;
+ }
+ }
+ break;
+ case 2:
+ // Check for a three-finger swipe
+ if (_fingerDown[0] && _fingerDown[1]) {
+ // Swipe to the right toggles Auto-drag
+ if (_dragDiffX[0] > _swipeDistX &&
+ _dragDiffX[1] > _swipeDistX &&
+ _dragDiffX[2] > _swipeDistX) {
+ // Virtually lift fingers to prevent repeat triggers
+ _fingerDown[0] = _fingerDown[1] = _fingerDown[2] = false;
+ // Toggle Auto-drag mode
+ _autoDragMode = !_autoDragMode;
+ // I18N: Auto-drag toggle status.
+ Common::String dialogMsg(_("Auto-drag mode is now"));
+ dialogMsg += " ";
+ // I18N: Auto-drag on or off.
+ dialogMsg += (_autoDragMode ? _("ON") : _("OFF"));
+ dialogMsg += ".\n";
+ // I18N: Instructions to toggle auto-drag.
+ dialogMsg += _(
+ "Swipe three fingers to the right to toggle.");
+ GUI::TimedMessageDialog dialog(dialogMsg, 1500);
+ dialog.runModal();
+ return true;
+ } else if (_dragDiffY[0] > _swipeDistY &&
+ _dragDiffY[1] > _swipeDistY &&
+ _dragDiffY[2] > _swipeDistY ) {
+ // Swipe down to emulate spacebar (pause)
+ // Virtually lift fingers to prevent repeat triggers
+ _fingerDown[0] = _fingerDown[1] = _fingerDown[2] = false;
+ // Press space
+ event.type = Common::EVENT_KEYDOWN;
+ event.kbd.flags = 0;
+ event.kbd.keycode = Common::KEYCODE_SPACE;
+ event.kbd.ascii = Common::ASCII_SPACE;
+ _queuedSpaceUpTime = g_system->getMillis() +
+ QUEUED_KEY_DELAY;
+ }
+ }
+ }
}
return true;
}
+/**
+ * Before calling the original SDL implementation, this method loads in
+ * queued events.
+ *
+ * @param event The ScummVM event
+ */
+bool WebOSSdlEventSource::pollEvent(Common::Event &event) {
+ uint32 curTime = g_system->getMillis();
+
+ // Event-dependent nitializations for when SDL runs its first poll.
+ if (_firstPoll) {
+ // Set the initial dimensions
+ calculateDimensions();
+
+ // Having a mouse pointer on screen when not in Touchpad mode is poor
+ // interface design, because the user won't know whether to tap buttons
+ // or drag the pointer to them. On the first poll, set the appropriate
+ // pointer visibility.
+ g_system->showMouse(_touchpadMode);
+ _firstPoll = false;
+ }
+
+ // Run down the priority list for queued events. The built-in
+ // event queue runs events on the next poll, which causes many
+ // WebOS devices (and a few game engines) to ignore certain inputs.
+ // Allowing keys and clicks to stay "down" longer is enough to register
+ // the press.
+ if (_queuedEscapeUpTime != 0 && curTime >= _queuedEscapeUpTime) {
+ event.type = Common::EVENT_KEYUP;
+ event.kbd.flags = 0;
+ event.kbd.keycode = Common::KEYCODE_ESCAPE;
+ event.kbd.ascii = Common::ASCII_ESCAPE;
+ _queuedEscapeUpTime = 0;
+ return true;
+ } else if (_queuedSpaceUpTime != 0 && curTime >= _queuedSpaceUpTime) {
+ event.type = Common::EVENT_KEYUP;
+ event.kbd.flags = 0;
+ event.kbd.keycode = Common::KEYCODE_SPACE;
+ event.kbd.ascii = Common::ASCII_SPACE;
+ _queuedSpaceUpTime = 0;
+ return true;
+ } else if (_queuedRUpTime != 0 && curTime >= _queuedRUpTime) {
+ event.type = Common::EVENT_RBUTTONUP;
+ processMouseEvent(event, _curX, _curY);
+ _queuedRUpTime = 0;
+ return true;
+ } else if (_queuedDragTime != 0 && curTime >= _queuedDragTime) {
+ event.type = Common::EVENT_LBUTTONDOWN;
+ _dragging = true;
+ processMouseEvent(event, _curX, _curY);
+ _queuedDragTime = 0;
+ return true;
+ }
+
+ return SdlEventSource::pollEvent(event);
+}
+
+/**
+ * Sets the _screenX and _screenY variables to the effective screen dimensions,
+ * and alters _swipeDistX and _swipeDistY to the correct relative values.
+ */
+void WebOSSdlEventSource::calculateDimensions() {
+ _screenX = g_system->getOverlayWidth();
+ _screenY = g_system->getOverlayHeight();
+ _swipeDistX = _screenX * SWIPE_PERCENT_HORIZ / 100;
+ _swipeDistY = _screenY * SWIPE_PERCENT_VERT / 100;
+}
+
#endif
diff --git a/backends/events/webossdl/webossdl-events.h b/backends/events/webossdl/webossdl-events.h
index c925132d92..a36ee535a3 100644
--- a/backends/events/webossdl/webossdl-events.h
+++ b/backends/events/webossdl/webossdl-events.h
@@ -29,13 +29,87 @@
* SDL events manager for WebOS
*/
class WebOSSdlEventSource : public SdlEventSource {
+public:
+ enum {
+ DOUBLETAP_LIMIT = 400,
+ MAX_FINGERS = 3,
+ MOUSE_DEADZONE_PIXELS = 5,
+ QUEUED_DRAG_DELAY = 500,
+ QUEUED_KEY_DELAY = 250,
+ QUEUED_RUP_DELAY = 50,
+ SWIPE_PERCENT_HORIZ = 15,
+ SWIPE_PERCENT_VERT = 20
+ };
+ WebOSSdlEventSource() :
+ _gestureDown(false),
+ _dragStartTime(0), _dragging(false),
+ _curX(0), _curY(0),
+ _screenX(0), _screenY(0),
+ _touchpadMode(false), _autoDragMode(true),
+ _doClick(true),
+ _queuedDragTime(0), _queuedEscapeUpTime(0), _queuedSpaceUpTime(0),
+ _queuedRUpTime(0),
+ _firstPoll(true) {
+ for (int i = 0; i < MAX_FINGERS; i++) {
+ _fingerDown[i] = false;
+ _screenDownTime[i] = _dragDiffX[i] = _dragDiffY[i] = 0;
+ }
+ };
protected:
+ // Inidicates if gesture area is pressed down or not.
+ bool _gestureDown;
+
+ // The timestamp when screen was pressed down for each finger.
+ uint32 _screenDownTime[MAX_FINGERS];
+
+ // The timestamp when a possible drag operation was triggered.
+ uint32 _dragStartTime;
+
+ // The distance each finger traveled from touch to release.
+ int _dragDiffX[MAX_FINGERS], _dragDiffY[MAX_FINGERS];
+
+ // Indicates if we are in drag mode.
+ bool _dragging;
+
+ // The current mouse position on the screen.
+ int _curX, _curY;
+
+ // The current screen dimensions
+ int _screenX, _screenY;
+
+ // The drag distance for linear gestures
+ int _swipeDistX, _swipeDistY;
+
+ // Indicates if we're in touchpad mode or tap-to-move mode.
+ bool _touchpadMode;
+
+ // Indicates if we're in automatic drag mode.
+ bool _autoDragMode;
+
+ // Tracks which fingers are currently touching the screen.
+ bool _fingerDown[MAX_FINGERS];
+
+ // Indicates if a click should be executed when the first finger is lifted
+ bool _doClick;
+
+ // Indicates whether the event poll has been run before
+ bool _firstPoll;
+
+ // Event queues
+ uint32 _queuedDragTime, _queuedEscapeUpTime, _queuedSpaceUpTime,
+ _queuedRUpTime;
+
+ // SDL overrides
virtual void SDLModToOSystemKeyFlags(SDLMod mod, Common::Event &event);
virtual bool handleKeyDown(SDL_Event &ev, Common::Event &event);
virtual bool handleKeyUp(SDL_Event &ev, Common::Event &event);
virtual bool handleMouseButtonDown(SDL_Event &ev, Common::Event &event);
virtual bool handleMouseButtonUp(SDL_Event &ev, Common::Event &event);
virtual bool handleMouseMotion(SDL_Event &ev, Common::Event &event);
+ virtual bool pollEvent(Common::Event &event);
+
+ // Utility functions
+ void calculateDimensions();
};
#endif
diff --git a/backends/events/wincesdl/wincesdl-events.cpp b/backends/events/wincesdl/wincesdl-events.cpp
index 4fab47a58e..e73a4e66dd 100644
--- a/backends/events/wincesdl/wincesdl-events.cpp
+++ b/backends/events/wincesdl/wincesdl-events.cpp
@@ -43,7 +43,7 @@ void WINCESdlEventSource::init(WINCESdlGraphicsManager *graphicsMan) {
_graphicsMan = graphicsMan;
}
-void WINCESdlEventSource::fillMouseEvent(Common::Event &event, int x, int y) {
+void WINCESdlEventSource::processMouseEvent(Common::Event &event, int x, int y) {
event.mouse.x = x;
event.mouse.y = y;
@@ -153,7 +153,7 @@ bool WINCESdlEventSource::pollEvent(Common::Event &event) {
case SDL_MOUSEMOTION:
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, ev.motion.x, ev.motion.y);
+ processMouseEvent(event, ev.motion.x, ev.motion.y);
_graphicsMan->setMousePos(event.mouse.x, event.mouse.y);
return true;
@@ -165,7 +165,7 @@ bool WINCESdlEventSource::pollEvent(Common::Event &event) {
event.type = Common::EVENT_RBUTTONDOWN;
else
break;
- fillMouseEvent(event, ev.button.x, ev.button.y);
+ processMouseEvent(event, ev.button.x, ev.button.y);
if (event.mouse.x > _tapX)
@@ -183,7 +183,8 @@ bool WINCESdlEventSource::pollEvent(Common::Event &event) {
if (_tapTime) { // second tap
if (_closeClick && (GetTickCount() - _tapTime < 1000)) {
if (event.mouse.y <= 20 &&
- _graphicsMan->_panelInitialized) {
+ _graphicsMan->_panelInitialized &&
+ !_graphicsMan->_noDoubleTapPT) {
// top of screen (show panel)
_graphicsMan->swap_panel_visibility();
} else if (!_graphicsMan->_noDoubleTapRMB) {
@@ -240,7 +241,7 @@ bool WINCESdlEventSource::pollEvent(Common::Event &event) {
_rbutton = false;
}
- fillMouseEvent(event, ev.button.x, ev.button.y);
+ processMouseEvent(event, ev.button.x, ev.button.y);
if (freeLookActive && !_closeClick) {
_tapX = event.mouse.x;
@@ -260,8 +261,7 @@ bool WINCESdlEventSource::pollEvent(Common::Event &event) {
return true;
case SDL_VIDEOEXPOSE:
- // HACK: Send a fake event, handled by SdlGraphicsManager
- event.type = (Common::EventType)OSystem_SDL::kSdlEventExpose;
+ _graphicsMan->notifyVideoExpose();
break;
case SDL_QUIT:
@@ -278,9 +278,8 @@ bool WINCESdlEventSource::pollEvent(Common::Event &event) {
if (ev.active.state & SDL_APPINPUTFOCUS) {
_graphicsMan->_hasfocus = ev.active.gain;
SDL_PauseAudio(!_graphicsMan->_hasfocus);
- if (_graphicsMan->_hasfocus) {
- event.type = (Common::EventType)OSystem_SDL::kSdlEventExpose;
- }
+ if (_graphicsMan->_hasfocus)
+ _graphicsMan->notifyVideoExpose();
}
break;
}
diff --git a/backends/events/wincesdl/wincesdl-events.h b/backends/events/wincesdl/wincesdl-events.h
index deeee6196c..5eff630c2a 100644
--- a/backends/events/wincesdl/wincesdl-events.h
+++ b/backends/events/wincesdl/wincesdl-events.h
@@ -43,7 +43,7 @@ public:
// Overloaded from SDL backend (toolbar handling)
bool pollEvent(Common::Event &event);
// Overloaded from SDL backend (mouse and new scaler handling)
- void fillMouseEvent(Common::Event &event, int x, int y);
+ void processMouseEvent(Common::Event &event, int x, int y);
protected:
diff --git a/backends/fs/ds/ds-fs-factory.cpp b/backends/fs/ds/ds-fs-factory.cpp
index 3fd97d07eb..4e09c3446b 100644
--- a/backends/fs/ds/ds-fs-factory.cpp
+++ b/backends/fs/ds/ds-fs-factory.cpp
@@ -27,7 +27,9 @@
#include "backends/fs/ds/ds-fs.h"
#include "dsmain.h" //for the isGBAMPAvailable() function
+namespace Common {
DECLARE_SINGLETON(DSFilesystemFactory);
+}
AbstractFSNode *DSFilesystemFactory::makeRootFileNode() const {
if (DS::isGBAMPAvailable()) {
diff --git a/backends/fs/n64/n64-fs-factory.cpp b/backends/fs/n64/n64-fs-factory.cpp
index 7cabbf4f7a..5c588c5eb5 100644
--- a/backends/fs/n64/n64-fs-factory.cpp
+++ b/backends/fs/n64/n64-fs-factory.cpp
@@ -42,4 +42,3 @@ AbstractFSNode *N64FilesystemFactory::makeFileNodePath(const Common::String &pat
}
#endif
-
diff --git a/backends/fs/n64/n64-fs.cpp b/backends/fs/n64/n64-fs.cpp
index e712c198a9..fe37dad467 100644
--- a/backends/fs/n64/n64-fs.cpp
+++ b/backends/fs/n64/n64-fs.cpp
@@ -161,4 +161,3 @@ Common::WriteStream *N64FilesystemNode::createWriteStream() {
}
#endif //#ifdef __N64__
-
diff --git a/backends/fs/n64/romfsstream.cpp b/backends/fs/n64/romfsstream.cpp
index c833a228f5..570f25932d 100644
--- a/backends/fs/n64/romfsstream.cpp
+++ b/backends/fs/n64/romfsstream.cpp
@@ -83,4 +83,3 @@ RomfsStream *RomfsStream::makeFromPath(const Common::String &path, bool writeMod
}
#endif /* __N64__ */
-
diff --git a/backends/fs/posix/posix-fs-factory.cpp b/backends/fs/posix/posix-fs-factory.cpp
index 829355be84..776ea86155 100644
--- a/backends/fs/posix/posix-fs-factory.cpp
+++ b/backends/fs/posix/posix-fs-factory.cpp
@@ -19,7 +19,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#if defined(POSIX)
+#if defined(POSIX) || defined(PLAYSTATION3)
// Re-enable some forbidden symbols to avoid clashes with stat.h and unistd.h.
// Also with clock() in sys/time.h in some Mac OS X SDKs.
diff --git a/backends/fs/posix/posix-fs-factory.h b/backends/fs/posix/posix-fs-factory.h
index a7075db94c..c7cec6fab5 100644
--- a/backends/fs/posix/posix-fs-factory.h
+++ b/backends/fs/posix/posix-fs-factory.h
@@ -30,6 +30,7 @@
* Parts of this class are documented in the base interface class, FilesystemFactory.
*/
class POSIXFilesystemFactory : public FilesystemFactory {
+protected:
virtual AbstractFSNode *makeRootFileNode() const;
virtual AbstractFSNode *makeCurrentDirectoryFileNode() const;
virtual AbstractFSNode *makeFileNodePath(const Common::String &path) const;
diff --git a/backends/fs/posix/posix-fs.cpp b/backends/fs/posix/posix-fs.cpp
index 0b94c37b16..320c5a6f39 100644
--- a/backends/fs/posix/posix-fs.cpp
+++ b/backends/fs/posix/posix-fs.cpp
@@ -19,7 +19,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#if defined(POSIX)
+#if defined(POSIX) || defined(PLAYSTATION3)
// Re-enable some forbidden symbols to avoid clashes with stat.h and unistd.h.
// Also with clock() in sys/time.h in some Mac OS X SDKs.
diff --git a/backends/fs/ps2/ps2-fs-factory.cpp b/backends/fs/ps2/ps2-fs-factory.cpp
index cad92b5dec..ef7b2013a3 100644
--- a/backends/fs/ps2/ps2-fs-factory.cpp
+++ b/backends/fs/ps2/ps2-fs-factory.cpp
@@ -27,7 +27,9 @@
#include "backends/fs/ps2/ps2-fs-factory.h"
#include "backends/fs/ps2/ps2-fs.h"
+namespace Common {
DECLARE_SINGLETON(Ps2FilesystemFactory);
+}
AbstractFSNode *Ps2FilesystemFactory::makeRootFileNode() const {
return new Ps2FilesystemNode();
diff --git a/backends/fs/ps3/ps3-fs-factory.cpp b/backends/fs/ps3/ps3-fs-factory.cpp
new file mode 100644
index 0000000000..3257246c50
--- /dev/null
+++ b/backends/fs/ps3/ps3-fs-factory.cpp
@@ -0,0 +1,26 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "backends/fs/ps3/ps3-fs-factory.h"
+
+AbstractFSNode *PS3FilesystemFactory::makeCurrentDirectoryFileNode() const {
+ return makeRootFileNode();
+}
diff --git a/backends/fs/ps3/ps3-fs-factory.h b/backends/fs/ps3/ps3-fs-factory.h
new file mode 100644
index 0000000000..6c1988b1c9
--- /dev/null
+++ b/backends/fs/ps3/ps3-fs-factory.h
@@ -0,0 +1,36 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef PS3_FILESYSTEM_FACTORY_H
+#define PS3_FILESYSTEM_FACTORY_H
+
+#include "backends/fs/posix/posix-fs-factory.h"
+
+/**
+ * Creates PS3FilesystemFactory objects.
+ *
+ * Parts of this class are documented in the base interface class, FilesystemFactory.
+ */
+class PS3FilesystemFactory : public POSIXFilesystemFactory {
+ virtual AbstractFSNode *makeCurrentDirectoryFileNode() const;
+};
+
+#endif /*PS3_FILESYSTEM_FACTORY_H*/
diff --git a/backends/fs/psp/psp-fs-factory.cpp b/backends/fs/psp/psp-fs-factory.cpp
index ef1df246ba..bb3aca8ee6 100644
--- a/backends/fs/psp/psp-fs-factory.cpp
+++ b/backends/fs/psp/psp-fs-factory.cpp
@@ -43,7 +43,9 @@
#include <unistd.h>
+namespace Common {
DECLARE_SINGLETON(PSPFilesystemFactory);
+}
AbstractFSNode *PSPFilesystemFactory::makeRootFileNode() const {
return new PSPFilesystemNode();
diff --git a/backends/fs/stdiostream.cpp b/backends/fs/stdiostream.cpp
index 7342df0029..3ea0f9898b 100644
--- a/backends/fs/stdiostream.cpp
+++ b/backends/fs/stdiostream.cpp
@@ -20,6 +20,8 @@
*
*/
+#if !defined(DISABLE_STDIO_FILESTREAM)
+
// Disable symbol overrides so that we can use FILE, fopen etc.
#define FORBIDDEN_SYMBOL_ALLOW_ALL
@@ -100,3 +102,5 @@ StdioStream *StdioStream::makeFromPath(const Common::String &path, bool writeMod
return new StdioStream(handle);
return 0;
}
+
+#endif
diff --git a/backends/fs/symbian/symbian-fs.cpp b/backends/fs/symbian/symbian-fs.cpp
index fd74c8ca46..9f70e7a7c9 100644
--- a/backends/fs/symbian/symbian-fs.cpp
+++ b/backends/fs/symbian/symbian-fs.cpp
@@ -231,5 +231,3 @@ Common::WriteStream *SymbianFilesystemNode::createWriteStream() {
return SymbianStdioStream::makeFromPath(getPath(), true);
}
#endif //#if defined (__SYMBIAN32__)
-
-
diff --git a/backends/fs/symbian/symbianstream.cpp b/backends/fs/symbian/symbianstream.cpp
index 352595e25a..39249578f7 100644
--- a/backends/fs/symbian/symbianstream.cpp
+++ b/backends/fs/symbian/symbianstream.cpp
@@ -268,4 +268,3 @@ SymbianStdioStream *SymbianStdioStream::makeFromPath(const Common::String &path,
return new SymbianStdioStream(handle);
return 0;
}
-
diff --git a/backends/fs/wii/wii-fs-factory.cpp b/backends/fs/wii/wii-fs-factory.cpp
index 34cde8ef46..760e5316e7 100644
--- a/backends/fs/wii/wii-fs-factory.cpp
+++ b/backends/fs/wii/wii-fs-factory.cpp
@@ -40,7 +40,9 @@
#include <smb.h>
#endif
+namespace Common {
DECLARE_SINGLETON(WiiFilesystemFactory);
+}
WiiFilesystemFactory::WiiFilesystemFactory() :
_dvdMounted(false),
@@ -216,4 +218,3 @@ void WiiFilesystemFactory::umountUnused(const String &path) {
}
#endif
-
diff --git a/backends/fs/wii/wii-fs-factory.h b/backends/fs/wii/wii-fs-factory.h
index 42795ebf33..913c0a3b64 100644
--- a/backends/fs/wii/wii-fs-factory.h
+++ b/backends/fs/wii/wii-fs-factory.h
@@ -85,4 +85,3 @@ private:
};
#endif /*Wii_FILESYSTEM_FACTORY_H*/
-
diff --git a/backends/fs/wii/wii-fs.cpp b/backends/fs/wii/wii-fs.cpp
index eb631df1bf..4a19e18240 100644
--- a/backends/fs/wii/wii-fs.cpp
+++ b/backends/fs/wii/wii-fs.cpp
@@ -202,4 +202,3 @@ Common::WriteStream *WiiFilesystemNode::createWriteStream() {
}
#endif //#if defined(__WII__)
-
diff --git a/backends/fs/windows/windows-fs.cpp b/backends/fs/windows/windows-fs.cpp
index 9e864753c9..c32ad2da94 100644
--- a/backends/fs/windows/windows-fs.cpp
+++ b/backends/fs/windows/windows-fs.cpp
@@ -54,7 +54,7 @@ bool WindowsFilesystemNode::isWritable() const {
return _access(_path.c_str(), W_OK) == 0;
}
-void WindowsFilesystemNode::addFile(AbstractFSList &list, ListMode mode, const char *base, WIN32_FIND_DATA* find_data) {
+void WindowsFilesystemNode::addFile(AbstractFSList &list, ListMode mode, const char *base, bool hidden, WIN32_FIND_DATA* find_data) {
WindowsFilesystemNode entry;
char *asciiName = toAscii(find_data->cFileName);
bool isDirectory;
@@ -63,6 +63,10 @@ void WindowsFilesystemNode::addFile(AbstractFSList &list, ListMode mode, const c
if (!strcmp(asciiName, ".") || !strcmp(asciiName, ".."))
return;
+ // Skip hidden files if asked
+ if ((find_data->dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) && !hidden)
+ return;
+
isDirectory = (find_data->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ? true : false);
if ((!isDirectory && mode == Common::FSNode::kListDirectoriesOnly) ||
@@ -163,8 +167,6 @@ AbstractFSNode *WindowsFilesystemNode::getChild(const Common::String &n) const {
bool WindowsFilesystemNode::getChildren(AbstractFSList &myList, ListMode mode, bool hidden) const {
assert(_isDirectory);
- //TODO: honor the hidden flag
-
if (_isPseudoRoot) {
#ifndef _WIN32_WCE
// Drives enumeration
@@ -200,10 +202,10 @@ bool WindowsFilesystemNode::getChildren(AbstractFSList &myList, ListMode mode, b
if (handle == INVALID_HANDLE_VALUE)
return false;
- addFile(myList, mode, _path.c_str(), &desc);
+ addFile(myList, mode, _path.c_str(), hidden, &desc);
while (FindNextFile(handle, &desc))
- addFile(myList, mode, _path.c_str(), &desc);
+ addFile(myList, mode, _path.c_str(), hidden, &desc);
FindClose(handle);
}
diff --git a/backends/fs/windows/windows-fs.h b/backends/fs/windows/windows-fs.h
index 37d1e9099b..351307bef0 100644
--- a/backends/fs/windows/windows-fs.h
+++ b/backends/fs/windows/windows-fs.h
@@ -93,12 +93,13 @@ private:
* Adds a single WindowsFilesystemNode to a given list.
* This method is used by getChildren() to populate the directory entries list.
*
- * @param list List to put the file entry node in.
- * @param mode Mode to use while adding the file entry to the list.
- * @param base Common::String with the directory being listed.
- * @param find_data Describes a file that the FindFirstFile, FindFirstFileEx, or FindNextFile functions find.
+ * @param list List to put the file entry node in.
+ * @param mode Mode to use while adding the file entry to the list.
+ * @param base Common::String with the directory being listed.
+ * @param hidden true if hidden files should be added, false otherwise
+ * @param find_data Describes a file that the FindFirstFile, FindFirstFileEx, or FindNextFile functions find.
*/
- static void addFile(AbstractFSList &list, ListMode mode, const char *base, WIN32_FIND_DATA* find_data);
+ static void addFile(AbstractFSList &list, ListMode mode, const char *base, bool hidden, WIN32_FIND_DATA* find_data);
/**
* Converts a Unicode string to Ascii format.
diff --git a/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp b/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp
index 8075d0d45b..17a95688f3 100644
--- a/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp
+++ b/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp
@@ -122,7 +122,7 @@ void DINGUXSdlGraphicsManager::initSize(uint w, uint h) {
if (w > 320 || h > 240) {
setGraphicsMode(GFX_HALF);
setGraphicsModeIntern();
- _sdlEventSource->toggleMouseGrab();
+ _eventSource->toggleMouseGrab();
}
_transactionDetails.sizeChanged = true;
@@ -427,6 +427,7 @@ void DINGUXSdlGraphicsManager::hideOverlay() {
}
bool DINGUXSdlGraphicsManager::loadGFXMode() {
+ debug("Game ScreenMode = %d*%d", _videoMode.screenWidth, _videoMode.screenHeight);
// Forcefully disable aspect ratio correction for games
// which starts with a native 240px height resolution.
@@ -435,7 +436,6 @@ bool DINGUXSdlGraphicsManager::loadGFXMode() {
_videoMode.aspectRatioCorrection = false;
}
- debug("Game ScreenMode = %d*%d", _videoMode.screenWidth, _videoMode.screenHeight);
if (_videoMode.screenWidth > 320 || _videoMode.screenHeight > 240) {
_videoMode.aspectRatioCorrection = false;
setGraphicsMode(GFX_HALF);
@@ -473,9 +473,13 @@ bool DINGUXSdlGraphicsManager::hasFeature(OSystem::Feature f) {
void DINGUXSdlGraphicsManager::setFeatureState(OSystem::Feature f, bool enable) {
switch (f) {
- case OSystem::kFeatureAspectRatioCorrection:
+ case OSystem::kFeatureAspectRatioCorrection:
setAspectRatioCorrection(enable);
break;
+ case OSystem::kFeatureCursorPalette:
+ _cursorPaletteDisabled = !enable;
+ blitCursor();
+ break;
default:
break;
}
@@ -485,8 +489,10 @@ bool DINGUXSdlGraphicsManager::getFeatureState(OSystem::Feature f) {
assert(_transactionMode == kTransactionNone);
switch (f) {
- case OSystem::kFeatureAspectRatioCorrection:
- return _videoMode.aspectRatioCorrection;
+ case OSystem::kFeatureAspectRatioCorrection:
+ return _videoMode.aspectRatioCorrection;
+ case OSystem::kFeatureCursorPalette:
+ return !_cursorPaletteDisabled;
default:
return false;
}
@@ -510,21 +516,16 @@ void DINGUXSdlGraphicsManager::warpMouse(int x, int y) {
SurfaceSdlGraphicsManager::warpMouse(x, y);
}
-void DINGUXSdlGraphicsManager::adjustMouseEvent(const Common::Event &event) {
- if (!event.synthetic) {
- Common::Event newEvent(event);
- newEvent.synthetic = true;
- if (!_overlayVisible) {
- if (_videoMode.mode == GFX_HALF) {
- newEvent.mouse.x *= 2;
- newEvent.mouse.y *= 2;
- }
- newEvent.mouse.x /= _videoMode.scaleFactor;
- newEvent.mouse.y /= _videoMode.scaleFactor;
- if (_videoMode.aspectRatioCorrection)
- newEvent.mouse.y = aspect2Real(newEvent.mouse.y);
+void DINGUXSdlGraphicsManager::transformMouseCoordinates(Common::Point &point) {
+ if (!_overlayVisible) {
+ if (_videoMode.mode == GFX_HALF) {
+ point.x *= 2;
+ point.y *= 2;
}
- g_system->getEventManager()->pushEvent(newEvent);
+ point.x /= _videoMode.scaleFactor;
+ point.y /= _videoMode.scaleFactor;
+ if (_videoMode.aspectRatioCorrection)
+ point.y = aspect2Real(point.y);
}
}
diff --git a/backends/graphics/dinguxsdl/dinguxsdl-graphics.h b/backends/graphics/dinguxsdl/dinguxsdl-graphics.h
index 84a784b771..ecdd01d166 100644
--- a/backends/graphics/dinguxsdl/dinguxsdl-graphics.h
+++ b/backends/graphics/dinguxsdl/dinguxsdl-graphics.h
@@ -57,7 +57,7 @@ public:
SurfaceSdlGraphicsManager::MousePos *getMouseCurState();
SurfaceSdlGraphicsManager::VideoState *getVideoMode();
- virtual void adjustMouseEvent(const Common::Event &event);
+ virtual void transformMouseCoordinates(Common::Point &point);
};
#endif /* BACKENDS_GRAPHICS_SDL_DINGUX_H */
diff --git a/backends/graphics/gph/gph-graphics.cpp b/backends/graphics/gph/gph-graphics.cpp
index 82a32203fb..a0c1d9ad2b 100644
--- a/backends/graphics/gph/gph-graphics.cpp
+++ b/backends/graphics/gph/gph-graphics.cpp
@@ -36,7 +36,7 @@ static const OSystem::GraphicsMode s_supportedGraphicsModes[] = {
};
GPHGraphicsManager::GPHGraphicsManager(SdlEventSource *sdlEventSource)
- : SurfaceSdlGraphicsManager(sdlEventSource) {
+ : SurfaceSdlGraphicsManager(sdlEventSource) {
}
const OSystem::GraphicsMode *GPHGraphicsManager::getSupportedGraphicsModes() const {
@@ -138,10 +138,10 @@ void GPHGraphicsManager::initSize(uint w, uint h, const Graphics::PixelFormat *f
_videoMode.screenWidth = w;
_videoMode.screenHeight = h;
- if (w > 320 || h > 240){
+ if (w > 320 || h > 240) {
setGraphicsMode(GFX_HALF);
setGraphicsModeIntern();
- _sdlEventSource->toggleMouseGrab();
+ _eventSource->toggleMouseGrab();
}
_videoMode.overlayWidth = 320;
@@ -161,9 +161,9 @@ void GPHGraphicsManager::drawMouse() {
int width, height;
int hotX, hotY;
- if (_videoMode.mode == GFX_HALF && !_overlayVisible){
- dst.x = _mouseCurState.x/2;
- dst.y = _mouseCurState.y/2;
+ if (_videoMode.mode == GFX_HALF && !_overlayVisible) {
+ dst.x = _mouseCurState.x / 2;
+ dst.y = _mouseCurState.y / 2;
} else {
dst.x = _mouseCurState.x;
dst.y = _mouseCurState.y;
@@ -230,9 +230,9 @@ void GPHGraphicsManager::undrawMouse() {
if (!_overlayVisible && (x >= _videoMode.screenWidth || y >= _videoMode.screenHeight))
return;
- if (_mouseBackup.w != 0 && _mouseBackup.h != 0){
- if (_videoMode.mode == GFX_HALF && !_overlayVisible){
- addDirtyRect(x*2, y*2, _mouseBackup.w*2, _mouseBackup.h*2);
+ if (_mouseBackup.w != 0 && _mouseBackup.h != 0) {
+ if (_videoMode.mode == GFX_HALF && !_overlayVisible) {
+ addDirtyRect(x * 2, y * 2, _mouseBackup.w * 2, _mouseBackup.h * 2);
} else {
addDirtyRect(x, y, _mouseBackup.w, _mouseBackup.h);
}
@@ -252,8 +252,8 @@ void GPHGraphicsManager::internUpdateScreen() {
// If the shake position changed, fill the dirty area with blackness
if (_currentShakePos != _newShakePos ||
- (_mouseNeedsRedraw && _mouseBackup.y <= _currentShakePos)) {
- SDL_Rect blackrect = {0, 0, _videoMode.screenWidth * _videoMode.scaleFactor, _newShakePos * _videoMode.scaleFactor};
+ (_mouseNeedsRedraw && _mouseBackup.y <= _currentShakePos)) {
+ SDL_Rect blackrect = {0, 0, _videoMode.screenWidth *_videoMode.scaleFactor, _newShakePos *_videoMode.scaleFactor};
if (_videoMode.aspectRatioCorrection && !_overlayVisible)
blackrect.h = real2Aspect(blackrect.h - 1) + 1;
@@ -269,8 +269,8 @@ void GPHGraphicsManager::internUpdateScreen() {
// screen surface accordingly.
if (_screen && _paletteDirtyEnd != 0) {
SDL_SetColors(_screen, _currentPalette + _paletteDirtyStart,
- _paletteDirtyStart,
- _paletteDirtyEnd - _paletteDirtyStart);
+ _paletteDirtyStart,
+ _paletteDirtyEnd - _paletteDirtyStart);
_paletteDirtyEnd = 0;
@@ -326,6 +326,9 @@ void GPHGraphicsManager::internUpdateScreen() {
_dirtyRectList[0].y = 0;
_dirtyRectList[0].w = width;
_dirtyRectList[0].h = height;
+
+ // HACK: Make sure the full hardware screen is wiped clean.
+ SDL_FillRect(_hwscreen, NULL, 0);
}
// Only draw anything if necessary
@@ -337,8 +340,8 @@ void GPHGraphicsManager::internUpdateScreen() {
for (r = _dirtyRectList; r != lastRect; ++r) {
dst = *r;
- dst.x++; // Shift rect by one since 2xSai needs to access the data around
- dst.y++; // any pixel to scale it, and we want to avoid mem access crashes.
+ dst.x++; // Shift rect by one since 2xSai needs to access the data around
+ dst.y++; // any pixel to scale it, and we want to avoid mem access crashes.
if (SDL_BlitSurface(origSurf, r, srcSurf, &dst) != 0)
error("SDL_BlitSurface failed: %s", SDL_GetError());
@@ -374,11 +377,11 @@ void GPHGraphicsManager::internUpdateScreen() {
assert(scalerProc != NULL);
if ((_videoMode.mode == GFX_HALF) && (scalerProc == DownscaleAllByHalf)) {
- if (dst_x%2==1){
+ if (dst_x % 2 == 1) {
dst_x--;
dst_w++;
}
- if (dst_y%2==1){
+ if (dst_y % 2 == 1) {
dst_y--;
dst_h++;
}
@@ -388,14 +391,14 @@ void GPHGraphicsManager::internUpdateScreen() {
dst_y = dst_y / 2;
scalerProc((byte *)srcSurf->pixels + (src_x * 2 + 2) + (src_y + 1) * srcPitch, srcPitch,
- (byte *)_hwscreen->pixels + dst_x * 2 + dst_y * dstPitch, dstPitch, dst_w, dst_h);
+ (byte *)_hwscreen->pixels + dst_x * 2 + dst_y * dstPitch, dstPitch, dst_w, dst_h);
} else {
scalerProc((byte *)srcSurf->pixels + (r->x * 2 + 2) + (r->y + 1) * srcPitch, srcPitch,
(byte *)_hwscreen->pixels + r->x * 2 + dst_y * dstPitch, dstPitch, r->w, dst_h);
}
}
- if (_videoMode.mode == GFX_HALF && scalerProc == DownscaleAllByHalf){
+ if (_videoMode.mode == GFX_HALF && scalerProc == DownscaleAllByHalf) {
r->w = r->w / 2;
r->h = dst_h / 2;
} else {
@@ -419,7 +422,7 @@ void GPHGraphicsManager::internUpdateScreen() {
// This is necessary if shaking is active.
if (_forceFull) {
_dirtyRectList[0].y = 0;
- _dirtyRectList[0].h = (_videoMode.mode == GFX_HALF) ? effectiveScreenHeight()/2 : effectiveScreenHeight();
+ _dirtyRectList[0].h = (_videoMode.mode == GFX_HALF) ? effectiveScreenHeight() / 2 : effectiveScreenHeight();
}
drawMouse();
@@ -439,7 +442,7 @@ void GPHGraphicsManager::internUpdateScreen() {
}
void GPHGraphicsManager::showOverlay() {
- if (_videoMode.mode == GFX_HALF){
+ if (_videoMode.mode == GFX_HALF) {
_mouseCurState.x = _mouseCurState.x / 2;
_mouseCurState.y = _mouseCurState.y / 2;
}
@@ -447,89 +450,41 @@ void GPHGraphicsManager::showOverlay() {
}
void GPHGraphicsManager::hideOverlay() {
- if (_videoMode.mode == GFX_HALF){
+ if (_videoMode.mode == GFX_HALF) {
_mouseCurState.x = _mouseCurState.x * 2;
_mouseCurState.y = _mouseCurState.y * 2;
}
SurfaceSdlGraphicsManager::hideOverlay();
}
+bool GPHGraphicsManager::loadGFXMode() {
-//bool GPHGraphicsManager::loadGFXMode() {
-
-
-// _videoMode.overlayWidth = 320;
-// _videoMode.overlayHeight = 240;
-// _videoMode.fullscreen = true;
-//
-// /* Forcefully disable aspect ratio correction for games
-// that start with a native 240px height resolution
-// This corrects games with non-standard resolutions
-// such as MM Nes (256x240).
-// */
-// if(_videoMode.screenHeight == 240) {
-// _videoMode.aspectRatioCorrection = false;
-// }
-
-// debug("Game ScreenMode = %d*%d", _videoMode.screenWidth, _videoMode.screenHeight);
-// if (_videoMode.screenWidth > 320 || _videoMode.screenHeight > 240) {
-// _videoMode.aspectRatioCorrection = false;
-// setGraphicsMode(GFX_HALF);
-// debug("GraphicsMode set to HALF");
-// } else {
-// setGraphicsMode(GFX_NORMAL);
-// debug("GraphicsMode set to NORMAL");
-// }
-
-
-// if ((_videoMode.mode == GFX_HALF) && !_overlayVisible) {
-// //_videoMode.overlayWidth = _videoMode.screenWidth / 2;
-// //_videoMode.overlayHeight = _videoMode.screenHeight / 2;
-// _videoMode.overlayWidth = 320;
-// _videoMode.overlayHeight = 240;
-// _videoMode.fullscreen = true;
-// } else {
-//
-// _videoMode.overlayWidth = _videoMode.screenWidth * _videoMode.scaleFactor;
-// _videoMode.overlayHeight = _videoMode.screenHeight * _videoMode.scaleFactor;
-//
-// if (_videoMode.aspectRatioCorrection)
-// _videoMode.overlayHeight = real2Aspect(_videoMode.overlayHeight);
-//
-// //_videoMode.hardwareWidth = _videoMode.screenWidth * _videoMode.scaleFactor;
-// //_videoMode.hardwareHeight = effectiveScreenHeight();
-// _videoMode.hardwareWidth = 320;
-// _videoMode.hardwareHeight = 240;
-//
-// }
-
-// return SurfaceSdlGraphicsManager::loadGFXMode();
-//}
+ // We don't offer anything other than fullscreen on GPH devices so let�s not even pretend.
+ _videoMode.fullscreen = true;
+
+ // Set the hardware stats to match the LCD.
+ _videoMode.hardwareWidth = 320;
+ _videoMode.hardwareHeight = 240;
+
+ if (_videoMode.screenHeight != 200)
+ _videoMode.aspectRatioCorrection = false;
-bool GPHGraphicsManager::loadGFXMode() {
if (_videoMode.screenWidth > 320 || _videoMode.screenHeight > 240) {
_videoMode.aspectRatioCorrection = false;
setGraphicsMode(GFX_HALF);
-// printf("GFX_HALF\n");
} else {
setGraphicsMode(GFX_NORMAL);
-// printf("GFX_NORMAL\n");
}
if ((_videoMode.mode == GFX_HALF) && !_overlayVisible) {
_videoMode.overlayWidth = _videoMode.screenWidth / 2;
_videoMode.overlayHeight = _videoMode.screenHeight / 2;
- _videoMode.fullscreen = true;
} else {
-
_videoMode.overlayWidth = _videoMode.screenWidth * _videoMode.scaleFactor;
_videoMode.overlayHeight = _videoMode.screenHeight * _videoMode.scaleFactor;
if (_videoMode.aspectRatioCorrection)
_videoMode.overlayHeight = real2Aspect(_videoMode.overlayHeight);
-
- _videoMode.hardwareWidth = _videoMode.screenWidth * _videoMode.scaleFactor;
- _videoMode.hardwareHeight = effectiveScreenHeight();
}
return SurfaceSdlGraphicsManager::loadGFXMode();
}
@@ -542,9 +497,13 @@ bool GPHGraphicsManager::hasFeature(OSystem::Feature f) {
void GPHGraphicsManager::setFeatureState(OSystem::Feature f, bool enable) {
switch (f) {
- case OSystem::kFeatureAspectRatioCorrection:
+ case OSystem::kFeatureAspectRatioCorrection:
setAspectRatioCorrection(enable);
break;
+ case OSystem::kFeatureCursorPalette:
+ _cursorPaletteDisabled = !enable;
+ blitCursor();
+ break;
default:
break;
}
@@ -554,8 +513,10 @@ bool GPHGraphicsManager::getFeatureState(OSystem::Feature f) {
assert(_transactionMode == kTransactionNone);
switch (f) {
- case OSystem::kFeatureAspectRatioCorrection:
+ case OSystem::kFeatureAspectRatioCorrection:
return _videoMode.aspectRatioCorrection;
+ case OSystem::kFeatureCursorPalette:
+ return !_cursorPaletteDisabled;
default:
return false;
}
@@ -571,7 +532,7 @@ SurfaceSdlGraphicsManager::VideoState *GPHGraphicsManager::getVideoMode() {
void GPHGraphicsManager::warpMouse(int x, int y) {
if (_mouseCurState.x != x || _mouseCurState.y != y) {
- if (_videoMode.mode == GFX_HALF && !_overlayVisible){
+ if (_videoMode.mode == GFX_HALF && !_overlayVisible) {
x = x / 2;
y = y / 2;
}
@@ -579,21 +540,16 @@ void GPHGraphicsManager::warpMouse(int x, int y) {
SurfaceSdlGraphicsManager::warpMouse(x, y);
}
-void GPHGraphicsManager::adjustMouseEvent(const Common::Event &event) {
- if (!event.synthetic) {
- Common::Event newEvent(event);
- newEvent.synthetic = true;
- if (!_overlayVisible) {
- if (_videoMode.mode == GFX_HALF) {
- newEvent.mouse.x *= 2;
- newEvent.mouse.y *= 2;
- }
- newEvent.mouse.x /= _videoMode.scaleFactor;
- newEvent.mouse.y /= _videoMode.scaleFactor;
- if (_videoMode.aspectRatioCorrection)
- newEvent.mouse.y = aspect2Real(newEvent.mouse.y);
+void GPHGraphicsManager::transformMouseCoordinates(Common::Point &point) {
+ if (!_overlayVisible) {
+ if (_videoMode.mode == GFX_HALF) {
+ point.x *= 2;
+ point.y *= 2;
}
- g_system->getEventManager()->pushEvent(newEvent);
+ point.x /= _videoMode.scaleFactor;
+ point.y /= _videoMode.scaleFactor;
+ if (_videoMode.aspectRatioCorrection)
+ point.y = aspect2Real(point.y);
}
}
diff --git a/backends/graphics/gph/gph-graphics.h b/backends/graphics/gph/gph-graphics.h
index 45b8618569..f1f3d18b41 100644
--- a/backends/graphics/gph/gph-graphics.h
+++ b/backends/graphics/gph/gph-graphics.h
@@ -24,7 +24,7 @@
#define BACKENDS_GRAPHICS_GPH_H
#include "backends/graphics/surfacesdl/surfacesdl-graphics.h"
-#include "graphics/scaler/aspect.h" // for aspect2Real
+#include "graphics/scaler/aspect.h" // for aspect2Real
#include "graphics/scaler/downscaler.h"
enum {
@@ -56,7 +56,7 @@ public:
SurfaceSdlGraphicsManager::MousePos *getMouseCurState();
SurfaceSdlGraphicsManager::VideoState *getVideoMode();
- virtual void adjustMouseEvent(const Common::Event &event);
+ virtual void transformMouseCoordinates(Common::Point &point);
};
#endif /* BACKENDS_GRAPHICS_GPH_H */
diff --git a/backends/graphics/graphics.h b/backends/graphics/graphics.h
index 20924ed581..3f282df587 100644
--- a/backends/graphics/graphics.h
+++ b/backends/graphics/graphics.h
@@ -84,6 +84,10 @@ public:
virtual void setCursorPalette(const byte *colors, uint start, uint num) = 0;
virtual void displayMessageOnOSD(const char *msg) {}
+
+ // Graphics::PaletteManager interface
+ //virtual void setPalette(const byte *colors, uint start, uint num) = 0;
+ //virtual void grabPalette(byte *colors, uint start, uint num) = 0;
};
#endif
diff --git a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp
index 732074b7e2..de9838a0d7 100644
--- a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp
+++ b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp
@@ -134,7 +134,7 @@ void LinuxmotoSdlGraphicsManager::initSize(uint w, uint h) {
if (w > 320 || h > 240) {
setGraphicsMode(GFX_HALF);
setGraphicsModeIntern();
- _sdlEventSource->toggleMouseGrab();
+ _eventSource->toggleMouseGrab();
}
_transactionDetails.sizeChanged = true;
@@ -478,21 +478,16 @@ void LinuxmotoSdlGraphicsManager::warpMouse(int x, int y) {
SurfaceSdlGraphicsManager::warpMouse(x, y);
}
-void LinuxmotoSdlGraphicsManager::adjustMouseEvent(const Common::Event &event) {
- if (!event.synthetic) {
- Common::Event newEvent(event);
- newEvent.synthetic = true;
- if (!_overlayVisible) {
- if (_videoMode.mode == GFX_HALF) {
- newEvent.mouse.x *= 2;
- newEvent.mouse.y *= 2;
- }
- newEvent.mouse.x /= _videoMode.scaleFactor;
- newEvent.mouse.y /= _videoMode.scaleFactor;
- if (_videoMode.aspectRatioCorrection)
- newEvent.mouse.y = aspect2Real(newEvent.mouse.y);
+void LinuxmotoSdlGraphicsManager::transformMouseCoordinates(Common::Point &point) {
+ if (!_overlayVisible) {
+ if (_videoMode.mode == GFX_HALF) {
+ point.x *= 2;
+ point.y *= 2;
}
- g_system->getEventManager()->pushEvent(newEvent);
+ point.x /= _videoMode.scaleFactor;
+ point.y /= _videoMode.scaleFactor;
+ if (_videoMode.aspectRatioCorrection)
+ point.y = aspect2Real(point.y);
}
}
diff --git a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h
index 938512f323..ee2a566d71 100644
--- a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h
+++ b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h
@@ -42,8 +42,7 @@ public:
virtual void hideOverlay();
virtual void warpMouse(int x, int y);
-protected:
- virtual void adjustMouseEvent(const Common::Event &event);
+ virtual void transformMouseCoordinates(Common::Point &point);
};
#endif
diff --git a/backends/graphics/opengl/gltexture.h b/backends/graphics/opengl/gltexture.h
index f0cd7aed56..71f1eeb78f 100644
--- a/backends/graphics/opengl/gltexture.h
+++ b/backends/graphics/opengl/gltexture.h
@@ -20,6 +20,9 @@
*
*/
+#ifndef BACKENDS_GRAPHICS_OPENGL_GLTEXTURE_H
+#define BACKENDS_GRAPHICS_OPENGL_GLTEXTURE_H
+
#include "common/scummsys.h"
#ifdef WIN32
@@ -31,7 +34,20 @@
#undef ARRAYSIZE
#endif
-#if defined(USE_GLES)
+// HACK: At this point in Windows platforms, common/util.h has been included
+// via common/rect.h (from backends/graphics/sdl/sdl-graphics.h), via
+// backends/graphics/openglsdl/openglsdl-graphics.h. Thus, we end up with
+// COMMON_UTIL_H defined, and ARRAYSIZE undefined (bad!). Therefore,
+// ARRAYSIZE is undefined in openglsdl-graphics.cpp. This is a temporary
+// hackish solution fo fix compilation under Windows.
+#if !defined(ARRAYSIZE) && defined(COMMON_UTIL_H)
+#define ARRAYSIZE(x) ((int)(sizeof(x) / sizeof(x[0])))
+#endif
+
+#if defined(BADA)
+#include <FGraphicsOpengl.h>
+using namespace Osp::Graphics::Opengl;
+#elif defined(USE_GLES)
#include <GLES/gl.h>
#elif defined(SDL_BACKEND)
#include <SDL_opengl.h>
@@ -106,3 +122,5 @@ protected:
GLint _filter;
bool _refresh;
};
+
+#endif
diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp
index 046be4c669..8e01e76f16 100644
--- a/backends/graphics/opengl/opengl-graphics.cpp
+++ b/backends/graphics/opengl/opengl-graphics.cpp
@@ -67,10 +67,6 @@ OpenGLGraphicsManager::OpenGLGraphicsManager()
}
OpenGLGraphicsManager::~OpenGLGraphicsManager() {
- // Unregister the event observer
- if (g_system->getEventManager()->getEventDispatcher() != NULL)
- g_system->getEventManager()->getEventDispatcher()->unregisterObserver(this);
-
free(_gamePalette);
free(_cursorPalette);
@@ -79,11 +75,6 @@ OpenGLGraphicsManager::~OpenGLGraphicsManager() {
delete _cursorTexture;
}
-void OpenGLGraphicsManager::initEventObserver() {
- // Register the graphics manager as a event observer
- g_system->getEventManager()->getEventDispatcher()->registerObserver(this, 10, false);
-}
-
//
// Feature
//
@@ -1254,12 +1245,16 @@ void OpenGLGraphicsManager::toggleAntialiasing() {
_transactionDetails.filterChanged = true;
}
-uint OpenGLGraphicsManager::getAspectRatio() {
+uint OpenGLGraphicsManager::getAspectRatio() const {
// In case we enable aspect ratio correction we force a 4/3 ratio.
+ // But just for 320x200 and 640x400 games, since other games do not need
+ // this.
// TODO: This makes OpenGL Normal behave like OpenGL Conserve, when aspect
// ratio correction is enabled, but it's better than the previous 4/3 mode
// mess at least...
- if (_videoMode.aspectRatioCorrection)
+ if (_videoMode.aspectRatioCorrection
+ && ((_videoMode.screenWidth == 320 && _videoMode.screenHeight == 200)
+ || (_videoMode.screenWidth == 640 && _videoMode.screenHeight == 400)))
return 13333;
else if (_videoMode.mode == OpenGL::GFX_NORMAL)
return _videoMode.hardwareWidth * 10000 / _videoMode.hardwareHeight;
@@ -1282,36 +1277,6 @@ void OpenGLGraphicsManager::adjustMousePosition(int16 &x, int16 &y) {
}
}
-bool OpenGLGraphicsManager::notifyEvent(const Common::Event &event) {
- switch (event.type) {
- case Common::EVENT_MOUSEMOVE:
- if (!event.synthetic) {
- _cursorState.x = event.mouse.x;
- _cursorState.y = event.mouse.y;
- }
- case Common::EVENT_LBUTTONDOWN:
- case Common::EVENT_RBUTTONDOWN:
- case Common::EVENT_WHEELUP:
- case Common::EVENT_WHEELDOWN:
- case Common::EVENT_MBUTTONDOWN:
- case Common::EVENT_LBUTTONUP:
- case Common::EVENT_RBUTTONUP:
- case Common::EVENT_MBUTTONUP:
- if (!event.synthetic) {
- Common::Event newEvent(event);
- newEvent.synthetic = true;
- adjustMousePosition(newEvent.mouse.x, newEvent.mouse.y);
- g_system->getEventManager()->pushEvent(newEvent);
- }
- return !event.synthetic;
-
- default:
- break;
- }
-
- return false;
-}
-
bool OpenGLGraphicsManager::saveScreenshot(const char *filename) {
int width = _videoMode.hardwareWidth;
int height = _videoMode.hardwareHeight;
@@ -1383,9 +1348,13 @@ const char *OpenGLGraphicsManager::getCurrentModeName() {
}
#ifdef USE_OSD
+const Graphics::Font *OpenGLGraphicsManager::getFontOSD() {
+ return FontMan.getFontByUsage(Graphics::FontManager::kLocalizedFont);
+}
+
void OpenGLGraphicsManager::updateOSD() {
// The font we are going to use:
- const Graphics::Font *font = FontMan.getFontByUsage(Graphics::FontManager::kLocalizedFont);
+ const Graphics::Font *font = getFontOSD();
if (_osdSurface.w != _osdTexture->getWidth() || _osdSurface.h != _osdTexture->getHeight())
_osdSurface.create(_osdTexture->getWidth(), _osdTexture->getHeight(), _overlayFormat);
diff --git a/backends/graphics/opengl/opengl-graphics.h b/backends/graphics/opengl/opengl-graphics.h
index 56f7d92a12..6ded680eae 100644
--- a/backends/graphics/opengl/opengl-graphics.h
+++ b/backends/graphics/opengl/opengl-graphics.h
@@ -26,7 +26,8 @@
#include "backends/graphics/opengl/gltexture.h"
#include "backends/graphics/graphics.h"
#include "common/array.h"
-#include "common/events.h"
+#include "common/rect.h"
+#include "graphics/font.h"
#include "graphics/pixelformat.h"
// Uncomment this to enable the 'on screen display' code.
@@ -50,13 +51,11 @@ enum {
* the buffers swap, and implement loadGFXMode for handling the window/context if
* needed. If USE_RGB_COLOR is enabled, getSupportedFormats must be implemented.
*/
-class OpenGLGraphicsManager : public GraphicsManager, public Common::EventObserver {
+class OpenGLGraphicsManager : public GraphicsManager {
public:
OpenGLGraphicsManager();
virtual ~OpenGLGraphicsManager();
- virtual void initEventObserver();
-
virtual bool hasFeature(OSystem::Feature f);
virtual void setFeatureState(OSystem::Feature f, bool enable);
virtual bool getFeatureState(OSystem::Feature f);
@@ -109,10 +108,6 @@ public:
virtual void setCursorPalette(const byte *colors, uint start, uint num);
virtual void displayMessageOnOSD(const char *msg);
-
- // Override from Common::EventObserver
- bool notifyEvent(const Common::Event &event);
-
protected:
/**
* Setup OpenGL settings
@@ -220,10 +215,7 @@ protected:
virtual void calculateDisplaySize(int &width, int &height);
virtual void refreshDisplaySize();
- /**
- * Returns the current target aspect ratio x 10000
- */
- virtual uint getAspectRatio();
+ uint getAspectRatio() const;
bool _formatBGR;
@@ -324,6 +316,11 @@ protected:
*/
Common::Array<Common::String> _osdLines;
+ /**
+ * Returns the font used for on screen display
+ */
+ virtual const Graphics::Font *getFontOSD();
+
/**
* Update the OSD texture / surface.
*/
diff --git a/backends/graphics/openglsdl/openglsdl-graphics.cpp b/backends/graphics/openglsdl/openglsdl-graphics.cpp
index bd7dd32e3b..cfc78cfcac 100644
--- a/backends/graphics/openglsdl/openglsdl-graphics.cpp
+++ b/backends/graphics/openglsdl/openglsdl-graphics.cpp
@@ -30,8 +30,9 @@
#include "common/textconsole.h"
#include "common/translation.h"
-OpenGLSdlGraphicsManager::OpenGLSdlGraphicsManager()
+OpenGLSdlGraphicsManager::OpenGLSdlGraphicsManager(SdlEventSource *eventSource)
:
+ SdlGraphicsManager(eventSource),
_hwscreen(0),
_screenResized(false),
_activeFullscreenMode(-2),
@@ -71,6 +72,14 @@ OpenGLSdlGraphicsManager::OpenGLSdlGraphicsManager()
}
OpenGLSdlGraphicsManager::~OpenGLSdlGraphicsManager() {
+ // Unregister the event observer
+ if (g_system->getEventManager()->getEventDispatcher() != NULL)
+ g_system->getEventManager()->getEventDispatcher()->unregisterObserver(this);
+}
+
+void OpenGLSdlGraphicsManager::initEventObserver() {
+ // Register the graphics manager as a event observer
+ g_system->getEventManager()->getEventDispatcher()->registerObserver(this, 10, false);
}
bool OpenGLSdlGraphicsManager::hasFeature(OSystem::Feature f) {
@@ -304,14 +313,17 @@ bool OpenGLSdlGraphicsManager::loadGFXMode() {
_videoMode.overlayWidth = _videoMode.hardwareWidth = _videoMode.screenWidth * scaleFactor;
_videoMode.overlayHeight = _videoMode.hardwareHeight = _videoMode.screenHeight * scaleFactor;
- int screenAspectRatio = _videoMode.screenWidth * 10000 / _videoMode.screenHeight;
- int desiredAspectRatio = getAspectRatio();
-
- // Do not downscale dimensions, only enlarge them if needed
- if (screenAspectRatio > desiredAspectRatio)
- _videoMode.hardwareHeight = (_videoMode.overlayWidth * 10000 + 5000) / desiredAspectRatio;
- else if (screenAspectRatio < desiredAspectRatio)
- _videoMode.hardwareWidth = (_videoMode.overlayHeight * desiredAspectRatio + 5000) / 10000;
+ // The only modes where we need to adapt the aspect ratio are 320x200
+ // and 640x400. That is since our aspect ratio correction in fact is
+ // only used to ensure that the original pixel size aspect for these
+ // modes is used.
+ // (Non-square pixels on old monitors vs square pixel on new ones).
+ if (_videoMode.aspectRatioCorrection
+ && ((_videoMode.screenWidth == 320 && _videoMode.screenHeight == 200)
+ || (_videoMode.screenWidth == 640 && _videoMode.screenHeight == 400)))
+ _videoMode.overlayHeight = _videoMode.hardwareHeight = 240 * scaleFactor;
+ else
+ _videoMode.overlayHeight = _videoMode.hardwareHeight = _videoMode.screenHeight * scaleFactor;
}
_screenResized = false;
@@ -448,6 +460,10 @@ void OpenGLSdlGraphicsManager::toggleFullScreen(int loop) {
_activeFullscreenMode = -2;
setFullscreenMode(!isFullscreen);
}
+
+ // HACK: We need to force a refresh here, since we change the
+ // fullscreen mode.
+ _transactionDetails.needRefresh = true;
endGFXTransaction();
// Ignore resize events for the next 10 frames
@@ -609,50 +625,54 @@ bool OpenGLSdlGraphicsManager::notifyEvent(const Common::Event &event) {
}
}
break;
+
case Common::EVENT_KEYUP:
return isHotkey(event);
- // HACK: Handle special SDL event
- // The new screen size is saved on the mouse event as part of HACK,
- // there is no common resize event.
- case OSystem_SDL::kSdlEventResize:
- // Do not resize if ignoring resize events.
- if (!_ignoreResizeFrames && !getFullscreenMode()) {
- bool scaleChanged = false;
- beginGFXTransaction();
- _videoMode.hardwareWidth = event.mouse.x;
- _videoMode.hardwareHeight = event.mouse.y;
-
- if (_videoMode.mode != OpenGL::GFX_ORIGINAL) {
- _screenResized = true;
- calculateDisplaySize(_videoMode.hardwareWidth, _videoMode.hardwareHeight);
- }
- int scale = MIN(_videoMode.hardwareWidth / _videoMode.screenWidth,
- _videoMode.hardwareHeight / _videoMode.screenHeight);
+ default:
+ break;
+ }
- if (getScale() != scale) {
- scaleChanged = true;
- setScale(MAX(MIN(scale, 3), 1));
- }
+ return false;
+}
- if (_videoMode.mode == OpenGL::GFX_ORIGINAL) {
- calculateDisplaySize(_videoMode.hardwareWidth, _videoMode.hardwareHeight);
- }
+void OpenGLSdlGraphicsManager::notifyVideoExpose() {
+}
+
+void OpenGLSdlGraphicsManager::notifyResize(const uint width, const uint height) {
+ // Do not resize if ignoring resize events.
+ if (!_ignoreResizeFrames && !getFullscreenMode()) {
+ bool scaleChanged = false;
+ beginGFXTransaction();
+ _videoMode.hardwareWidth = width;
+ _videoMode.hardwareHeight = height;
+
+ _screenResized = true;
+
+ int scale = MIN(_videoMode.hardwareWidth / _videoMode.screenWidth,
+ _videoMode.hardwareHeight / _videoMode.screenHeight);
- _transactionDetails.sizeChanged = true;
- endGFXTransaction();
+ if (getScale() != scale) {
+ scaleChanged = true;
+ setScale(MAX(MIN(scale, 3), 1));
+ }
+
+ _transactionDetails.sizeChanged = true;
+ endGFXTransaction();
#ifdef USE_OSD
- if (scaleChanged)
- displayScaleChangedMsg();
+ if (scaleChanged)
+ displayScaleChangedMsg();
#endif
- }
- return true;
-
- default:
- break;
}
+}
- return OpenGLGraphicsManager::notifyEvent(event);
+void OpenGLSdlGraphicsManager::transformMouseCoordinates(Common::Point &point) {
+ adjustMousePosition(point.x, point.y);
+}
+
+void OpenGLSdlGraphicsManager::notifyMousePos(Common::Point mouse) {
+ _cursorState.x = mouse.x;
+ _cursorState.y = mouse.y;
}
#endif
diff --git a/backends/graphics/openglsdl/openglsdl-graphics.h b/backends/graphics/openglsdl/openglsdl-graphics.h
index ba9f94db2d..1587183328 100644
--- a/backends/graphics/openglsdl/openglsdl-graphics.h
+++ b/backends/graphics/openglsdl/openglsdl-graphics.h
@@ -27,15 +27,17 @@
#if defined(ARRAYSIZE) && !defined(_WINDOWS_)
#undef ARRAYSIZE
#endif
-
+#include "backends/graphics/sdl/sdl-graphics.h"
#include "backends/graphics/opengl/opengl-graphics.h"
+#include "common/events.h"
+
/**
* SDL OpenGL graphics manager
*/
-class OpenGLSdlGraphicsManager : public OpenGLGraphicsManager {
+class OpenGLSdlGraphicsManager : public OpenGLGraphicsManager, public SdlGraphicsManager, public Common::EventObserver {
public:
- OpenGLSdlGraphicsManager();
+ OpenGLSdlGraphicsManager(SdlEventSource *eventSource);
virtual ~OpenGLSdlGraphicsManager();
virtual bool hasFeature(OSystem::Feature f);
@@ -45,10 +47,17 @@ public:
virtual Common::List<Graphics::PixelFormat> getSupportedFormats() const;
#endif
+ virtual void initEventObserver();
virtual bool notifyEvent(const Common::Event &event);
virtual void updateScreen();
+ // SdlGraphicsManager interface
+ virtual void notifyVideoExpose();
+ virtual void notifyResize(const uint width, const uint height);
+ virtual void transformMouseCoordinates(Common::Point &point);
+ virtual void notifyMousePos(Common::Point mouse);
+
protected:
virtual void internUpdateScreen();
diff --git a/backends/graphics/openpandora/op-graphics.h b/backends/graphics/openpandora/op-graphics.h
index ed26df7475..0b3eeae8ec 100644
--- a/backends/graphics/openpandora/op-graphics.h
+++ b/backends/graphics/openpandora/op-graphics.h
@@ -24,7 +24,7 @@
#define BACKENDS_GRAPHICS_OP_H
#include "backends/graphics/surfacesdl/surfacesdl-graphics.h"
-#include "graphics/scaler/aspect.h" // for aspect2Real
+#include "graphics/scaler/aspect.h" // for aspect2Real
#include "graphics/scaler/downscaler.h"
enum {
diff --git a/backends/graphics/sdl/sdl-graphics.cpp b/backends/graphics/sdl/sdl-graphics.cpp
new file mode 100644
index 0000000000..2eca4b8aab
--- /dev/null
+++ b/backends/graphics/sdl/sdl-graphics.cpp
@@ -0,0 +1,35 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "backends/graphics/sdl/sdl-graphics.h"
+
+#include "backends/events/sdl/sdl-events.h"
+
+SdlGraphicsManager::SdlGraphicsManager(SdlEventSource *source)
+ : _eventSource(source) {
+ _eventSource->setGraphicsManager(this);
+}
+
+SdlGraphicsManager::~SdlGraphicsManager() {
+ _eventSource->setGraphicsManager(0);
+}
+
diff --git a/backends/graphics/sdl/sdl-graphics.h b/backends/graphics/sdl/sdl-graphics.h
new file mode 100644
index 0000000000..ea9149fccb
--- /dev/null
+++ b/backends/graphics/sdl/sdl-graphics.h
@@ -0,0 +1,86 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef BACKENDS_GRAPHICS_SDL_SDLGRAPHICS_H
+#define BACKENDS_GRAPHICS_SDL_SDLGRAPHICS_H
+
+#include "common/rect.h"
+
+class SdlEventSource;
+
+/**
+ * Base class for a SDL based graphics manager.
+ *
+ * It features a few extra a few extra features required by SdlEventSource.
+ * FIXME/HACK:
+ * Note it does not inherit from GraphicsManager to avoid a diamond inheritance
+ * in the current OpenGLSdlGraphicsManager.
+ */
+class SdlGraphicsManager {
+public:
+ SdlGraphicsManager(SdlEventSource *source);
+ virtual ~SdlGraphicsManager();
+
+ /**
+ * Notify the graphics manager that the graphics needs to be redrawn, since
+ * the application window was modified.
+ *
+ * This is basically called when SDL_VIDEOEXPOSE was received.
+ */
+ virtual void notifyVideoExpose() = 0;
+
+ /**
+ * Notify the graphics manager about an resize event.
+ *
+ * It is noteworthy that the requested width/height should actually be set
+ * up as is and not changed by the graphics manager, since else it might
+ * lead to odd behavior for certain window managers.
+ *
+ * It is only required to overwrite this method in case you want a
+ * resizable window. The default implementation just does nothing.
+ *
+ * @param width Requested window width.
+ * @param height Requested window height.
+ */
+ virtual void notifyResize(const uint width, const uint height) {}
+
+ /**
+ * Transforms real screen coordinates into the current active screen
+ * coordinates (may be either game screen or overlay).
+ *
+ * @param point Mouse coordinates to transform.
+ */
+ virtual void transformMouseCoordinates(Common::Point &point) = 0;
+
+ /**
+ * Notifies the graphics manager about a position change according to the
+ * real screen coordinates.
+ *
+ * @param mouse Mouse position.
+ */
+ virtual void notifyMousePos(Common::Point mouse) = 0;
+
+protected:
+ SdlEventSource *_eventSource;
+};
+
+#endif
diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
index 66207b6808..f3a1cad040 100644
--- a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
+++ b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
@@ -122,7 +122,7 @@ static AspectRatio getDesiredAspectRatio() {
SurfaceSdlGraphicsManager::SurfaceSdlGraphicsManager(SdlEventSource *sdlEventSource)
:
- _sdlEventSource(sdlEventSource),
+ SdlGraphicsManager(sdlEventSource),
#ifdef USE_OSD
_osdSurface(0), _osdAlpha(SDL_ALPHA_TRANSPARENT), _osdFadeStartTime(0),
#endif
@@ -249,7 +249,10 @@ void SurfaceSdlGraphicsManager::setFeatureState(OSystem::Feature f, bool enable)
}
bool SurfaceSdlGraphicsManager::getFeatureState(OSystem::Feature f) {
- assert(_transactionMode == kTransactionNone);
+ // We need to allow this to be called from within a transaction, since we
+ // currently use it to retreive the graphics state, when switching from
+ // SDL->OpenGL mode for example.
+ //assert(_transactionMode == kTransactionNone);
switch (f) {
case OSystem::kFeatureFullscreenMode:
@@ -728,7 +731,8 @@ bool SurfaceSdlGraphicsManager::loadGFXMode() {
_videoMode.hardwareWidth = _videoMode.screenWidth * _videoMode.scaleFactor;
_videoMode.hardwareHeight = effectiveScreenHeight();
-#else
+// On GPH devices ALL the _videoMode.hardware... are setup in GPHGraphicsManager::loadGFXMode()
+#elif !defined(GPH_DEVICE)
_videoMode.hardwareWidth = _videoMode.overlayWidth;
_videoMode.hardwareHeight = _videoMode.overlayHeight;
#endif
@@ -752,6 +756,12 @@ bool SurfaceSdlGraphicsManager::loadGFXMode() {
error("allocating _screen failed");
#endif
+ // SDL 1.2 palettes default to all black,
+ // SDL 1.3 palettes default to all white,
+ // Thus set our own default palette to all black.
+ // SDL_SetColors does nothing for non indexed surfaces.
+ SDL_SetColors(_screen, _currentPalette, 0, 256);
+
//
// Create the surface that contains the scaled graphics in 16 bit mode
//
@@ -840,7 +850,7 @@ bool SurfaceSdlGraphicsManager::loadGFXMode() {
SDL_SetColorKey(_osdSurface, SDL_RLEACCEL | SDL_SRCCOLORKEY | SDL_SRCALPHA, kOSDColorKey);
#endif
- _sdlEventSource->resetKeyboadEmulation(
+ _eventSource->resetKeyboadEmulation(
_videoMode.screenWidth * _videoMode.scaleFactor - 1,
effectiveScreenHeight() - 1);
@@ -2229,20 +2239,6 @@ bool SurfaceSdlGraphicsManager::isScalerHotkey(const Common::Event &event) {
return false;
}
-void SurfaceSdlGraphicsManager::adjustMouseEvent(const Common::Event &event) {
- if (!event.synthetic) {
- Common::Event newEvent(event);
- newEvent.synthetic = true;
- if (!_overlayVisible) {
- newEvent.mouse.x /= _videoMode.scaleFactor;
- newEvent.mouse.y /= _videoMode.scaleFactor;
- if (_videoMode.aspectRatioCorrection)
- newEvent.mouse.y = aspect2Real(newEvent.mouse.y);
- }
- g_system->getEventManager()->pushEvent(newEvent);
- }
-}
-
void SurfaceSdlGraphicsManager::toggleFullScreen() {
beginGFXTransaction();
setFullscreenMode(!_videoMode.fullscreen);
@@ -2291,26 +2287,10 @@ bool SurfaceSdlGraphicsManager::notifyEvent(const Common::Event &event) {
if (handleScalerHotkeys(event.kbd.keycode))
return true;
}
+
case Common::EVENT_KEYUP:
return isScalerHotkey(event);
- case Common::EVENT_MOUSEMOVE:
- if (event.synthetic)
- setMousePos(event.mouse.x, event.mouse.y);
- case Common::EVENT_LBUTTONDOWN:
- case Common::EVENT_RBUTTONDOWN:
- case Common::EVENT_WHEELUP:
- case Common::EVENT_WHEELDOWN:
- case Common::EVENT_MBUTTONDOWN:
- case Common::EVENT_LBUTTONUP:
- case Common::EVENT_RBUTTONUP:
- case Common::EVENT_MBUTTONUP:
- adjustMouseEvent(event);
- return !event.synthetic;
-
- // HACK: Handle special SDL event
- case OSystem_SDL::kSdlEventExpose:
- _forceFull = true;
- return false;
+
default:
break;
}
@@ -2318,4 +2298,22 @@ bool SurfaceSdlGraphicsManager::notifyEvent(const Common::Event &event) {
return false;
}
+void SurfaceSdlGraphicsManager::notifyVideoExpose() {
+ _forceFull = true;
+}
+
+void SurfaceSdlGraphicsManager::transformMouseCoordinates(Common::Point &point) {
+ if (!_overlayVisible) {
+ point.x /= _videoMode.scaleFactor;
+ point.y /= _videoMode.scaleFactor;
+ if (_videoMode.aspectRatioCorrection)
+ point.y = aspect2Real(point.y);
+ }
+}
+
+void SurfaceSdlGraphicsManager::notifyMousePos(Common::Point mouse) {
+ transformMouseCoordinates(mouse);
+ setMousePos(mouse.x, mouse.y);
+}
+
#endif
diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.h b/backends/graphics/surfacesdl/surfacesdl-graphics.h
index cd8710d443..f71096d43e 100644
--- a/backends/graphics/surfacesdl/surfacesdl-graphics.h
+++ b/backends/graphics/surfacesdl/surfacesdl-graphics.h
@@ -24,6 +24,7 @@
#define BACKENDS_GRAPHICS_SURFACESDL_GRAPHICS_H
#include "backends/graphics/graphics.h"
+#include "backends/graphics/sdl/sdl-graphics.h"
#include "graphics/pixelformat.h"
#include "graphics/scaler.h"
#include "common/events.h"
@@ -74,7 +75,7 @@ public:
/**
* SDL graphics manager
*/
-class SurfaceSdlGraphicsManager : public GraphicsManager, public Common::EventObserver {
+class SurfaceSdlGraphicsManager : public GraphicsManager, public SdlGraphicsManager, public Common::EventObserver {
public:
SurfaceSdlGraphicsManager(SdlEventSource *sdlEventSource);
virtual ~SurfaceSdlGraphicsManager();
@@ -140,9 +141,12 @@ public:
// Override from Common::EventObserver
bool notifyEvent(const Common::Event &event);
-protected:
- SdlEventSource *_sdlEventSource;
+ // SdlGraphicsManager interface
+ virtual void notifyVideoExpose();
+ virtual void transformMouseCoordinates(Common::Point &point);
+ virtual void notifyMousePos(Common::Point mouse);
+protected:
#ifdef USE_OSD
/** Surface containing the OSD message */
SDL_Surface *_osdSurface;
@@ -329,7 +333,6 @@ protected:
virtual bool handleScalerHotkeys(Common::KeyCode key);
virtual bool isScalerHotkey(const Common::Event &event);
- virtual void adjustMouseEvent(const Common::Event &event);
virtual void setMousePos(int x, int y);
virtual void toggleFullScreen();
virtual bool saveScreenshot(const char *filename);
diff --git a/backends/graphics/symbiansdl/symbiansdl-graphics.cpp b/backends/graphics/symbiansdl/symbiansdl-graphics.cpp
index 4a9a219641..5fe8b19887 100644
--- a/backends/graphics/symbiansdl/symbiansdl-graphics.cpp
+++ b/backends/graphics/symbiansdl/symbiansdl-graphics.cpp
@@ -77,4 +77,3 @@ void SymbianSdlGraphicsManager::setFeatureState(OSystem::Feature f, bool enable)
}
#endif
-
diff --git a/backends/graphics/symbiansdl/symbiansdl-graphics.h b/backends/graphics/symbiansdl/symbiansdl-graphics.h
index 404ca87a0a..73e810a629 100644
--- a/backends/graphics/symbiansdl/symbiansdl-graphics.h
+++ b/backends/graphics/symbiansdl/symbiansdl-graphics.h
@@ -39,4 +39,3 @@ public:
};
#endif
-
diff --git a/backends/graphics/wincesdl/wincesdl-graphics.cpp b/backends/graphics/wincesdl/wincesdl-graphics.cpp
index f9f963dc70..58b735ef8b 100644
--- a/backends/graphics/wincesdl/wincesdl-graphics.cpp
+++ b/backends/graphics/wincesdl/wincesdl-graphics.cpp
@@ -44,7 +44,7 @@
WINCESdlGraphicsManager::WINCESdlGraphicsManager(SdlEventSource *sdlEventSource)
: SurfaceSdlGraphicsManager(sdlEventSource),
- _panelInitialized(false), _noDoubleTapRMB(false),
+ _panelInitialized(false), _noDoubleTapRMB(false), _noDoubleTapPT(false),
_toolbarHighDrawn(false), _newOrientation(0), _orientationLandscape(0),
_panelVisible(true), _saveActiveToolbar(NAME_MAIN_PANEL), _panelStateForced(false),
_canBeAspectScaled(false), _scalersChanged(false), _saveToolbarState(false),
@@ -478,6 +478,9 @@ void WINCESdlGraphicsManager::update_game_settings() {
if (ConfMan.hasKey("no_doubletap_rightclick"))
_noDoubleTapRMB = ConfMan.getBool("no_doubletap_rightclick");
+
+ if (ConfMan.hasKey("no_doubletap_paneltoggle"))
+ _noDoubleTapPT = ConfMan.getBool("no_doubletap_paneltoggle");
}
void WINCESdlGraphicsManager::internUpdateScreen() {
@@ -931,7 +934,7 @@ bool WINCESdlGraphicsManager::loadGFXMode() {
_toolbarHigh = NULL;
// keyboard cursor control, some other better place for it?
- _sdlEventSource->resetKeyboadEmulation(_videoMode.screenWidth * _scaleFactorXm / _scaleFactorXd - 1, _videoMode.screenHeight * _scaleFactorXm / _scaleFactorXd - 1);
+ _eventSource->resetKeyboadEmulation(_videoMode.screenWidth * _scaleFactorXm / _scaleFactorXd - 1, _videoMode.screenHeight * _scaleFactorXm / _scaleFactorXd - 1);
return true;
}
@@ -1155,22 +1158,17 @@ void WINCESdlGraphicsManager::setMouseCursor(const byte *buf, uint w, uint h, in
}
}
-void WINCESdlGraphicsManager::adjustMouseEvent(const Common::Event &event) {
- if (!event.synthetic) {
- Common::Event newEvent(event);
- newEvent.synthetic = true;
- /*
- if (!_overlayVisible) {
- newEvent.mouse.x = newEvent.mouse.x * _scaleFactorXd / _scaleFactorXm;
- newEvent.mouse.y = newEvent.mouse.y * _scaleFactorYd / _scaleFactorYm;
- newEvent.mouse.x /= _videoMode.scaleFactor;
- newEvent.mouse.y /= _videoMode.scaleFactor;
- if (_videoMode.aspectRatioCorrection)
- newEvent.mouse.y = aspect2Real(newEvent.mouse.y);
- }
- */
- g_system->getEventManager()->pushEvent(newEvent);
+void WINCESdlGraphicsManager::transformMouseCoordinates(Common::Point &point) {
+ /*
+ if (!_overlayVisible) {
+ point.x = point.x * _scaleFactorXd / _scaleFactorXm;
+ point.y = point.y * _scaleFactorYd / _scaleFactorYm;
+ point.x /= _videoMode.scaleFactor;
+ point.y /= _videoMode.scaleFactor;
+ if (_videoMode.aspectRatioCorrection)
+ point.y = aspect2Real(point.y);
}
+ */
}
void WINCESdlGraphicsManager::setMousePos(int x, int y) {
@@ -1599,6 +1597,19 @@ void WINCESdlGraphicsManager::swap_mouse_visibility() {
undrawMouse();
}
+void WINCESdlGraphicsManager::init_panel() {
+ _panelVisible = true;
+ if (_panelInitialized) {
+ _toolbarHandler.setVisible(true);
+ _toolbarHandler.setActive(NAME_MAIN_PANEL);
+ }
+}
+
+void WINCESdlGraphicsManager::reset_panel() {
+ _panelVisible = false;
+ _toolbarHandler.setVisible(false);
+}
+
// Smartphone actions
void WINCESdlGraphicsManager::initZones() {
int i;
@@ -1641,4 +1652,3 @@ WINCESdlGraphicsManager::zoneDesc WINCESdlGraphicsManager::_zones[TOTAL_ZONES] =
};
#endif /* _WIN32_WCE */
-
diff --git a/backends/graphics/wincesdl/wincesdl-graphics.h b/backends/graphics/wincesdl/wincesdl-graphics.h
index c620082b0c..2e8c3313b3 100644
--- a/backends/graphics/wincesdl/wincesdl-graphics.h
+++ b/backends/graphics/wincesdl/wincesdl-graphics.h
@@ -90,6 +90,8 @@ public:
void swap_zoom_up();
void swap_zoom_down();
void swap_mouse_visibility();
+ void init_panel();
+ void reset_panel();
void swap_freeLook();
bool getFreeLookState();
@@ -115,6 +117,7 @@ public:
bool _panelInitialized; // only initialize the toolbar once
bool _noDoubleTapRMB; // disable double tap -> rmb click
+ bool _noDoubleTapPT; // disable double tap for toolbar toggling
CEGUI::ToolbarHandler _toolbarHandler;
@@ -155,8 +158,7 @@ public:
static zoneDesc _zones[TOTAL_ZONES];
-protected:
- virtual void adjustMouseEvent(const Common::Event &event);
+ virtual void transformMouseCoordinates(Common::Point &point);
private:
bool update_scalers();
@@ -203,4 +205,3 @@ private:
};
#endif /* BACKENDS_GRAPHICS_WINCE_SDL_H */
-
diff --git a/backends/log/log.cpp b/backends/log/log.cpp
index c02643b48b..693399bae5 100644
--- a/backends/log/log.cpp
+++ b/backends/log/log.cpp
@@ -102,4 +102,3 @@ void Log::printTimeStamp() {
} // End of namespace Log
} // End of namespace Backends
-
diff --git a/backends/log/log.h b/backends/log/log.h
index 8c95bfc435..524f70405f 100644
--- a/backends/log/log.h
+++ b/backends/log/log.h
@@ -126,4 +126,3 @@ private:
} // End of namespace Backends
#endif
-
diff --git a/backends/mixer/sdl13/sdl13-mixer.cpp b/backends/mixer/sdl13/sdl13-mixer.cpp
new file mode 100644
index 0000000000..84777c8bab
--- /dev/null
+++ b/backends/mixer/sdl13/sdl13-mixer.cpp
@@ -0,0 +1,109 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/scummsys.h"
+
+#if defined(SDL_BACKEND)
+
+#include "backends/mixer/sdl13/sdl13-mixer.h"
+#include "common/debug.h"
+#include "common/system.h"
+#include "common/config-manager.h"
+#include "common/textconsole.h"
+
+#ifdef GP2X
+#define SAMPLES_PER_SEC 11025
+#else
+#define SAMPLES_PER_SEC 22050
+#endif
+//#define SAMPLES_PER_SEC 44100
+
+Sdl13MixerManager::Sdl13MixerManager()
+ :
+ SdlMixerManager(),
+ _device(0) {
+
+}
+
+Sdl13MixerManager::~Sdl13MixerManager() {
+ _mixer->setReady(false);
+
+ SDL_CloseAudioDevice(_device);
+
+ delete _mixer;
+}
+
+void Sdl13MixerManager::init() {
+ // Start SDL Audio subsystem
+ if (SDL_InitSubSystem(SDL_INIT_AUDIO) == -1) {
+ error("Could not initialize SDL: %s", SDL_GetError());
+ }
+
+ // Get the desired audio specs
+ SDL_AudioSpec desired = getAudioSpec(SAMPLES_PER_SEC);
+
+ // Start SDL audio with the desired specs
+ _device = SDL_OpenAudioDevice(NULL, 0, &desired, &_obtained,
+ SDL_AUDIO_ALLOW_FREQUENCY_CHANGE);
+
+ if (_device <= 0) {
+ warning("Could not open audio device: %s", SDL_GetError());
+
+ _mixer = new Audio::MixerImpl(g_system, desired.freq);
+ assert(_mixer);
+ _mixer->setReady(false);
+ } else {
+ debug(1, "Output sample rate: %d Hz", _obtained.freq);
+
+ _mixer = new Audio::MixerImpl(g_system, _obtained.freq);
+ assert(_mixer);
+ _mixer->setReady(true);
+
+ startAudio();
+ }
+}
+
+void Sdl13MixerManager::startAudio() {
+ // Start the sound system
+ SDL_PauseAudioDevice(_device, 0);
+}
+
+void Sdl13MixerManager::suspendAudio() {
+ SDL_CloseAudioDevice(_device);
+ _audioSuspended = true;
+}
+
+int Sdl13MixerManager::resumeAudio() {
+ if (!_audioSuspended)
+ return -2;
+
+ _device = SDL_OpenAudioDevice(NULL, 0, &_obtained, NULL, 0);
+ if (_device <= 0) {
+ return -1;
+ }
+
+ SDL_PauseAudioDevice(_device, 0);
+ _audioSuspended = false;
+ return 0;
+}
+
+#endif
diff --git a/backends/mixer/sdl13/sdl13-mixer.h b/backends/mixer/sdl13/sdl13-mixer.h
new file mode 100644
index 0000000000..9e07ea8673
--- /dev/null
+++ b/backends/mixer/sdl13/sdl13-mixer.h
@@ -0,0 +1,67 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef BACKENDS_MIXER_SDL13_H
+#define BACKENDS_MIXER_SDL13_H
+
+#include "backends/mixer/sdl/sdl-mixer.h"
+
+/**
+ * SDL mixer manager. It wraps the actual implementation
+ * of the Audio:Mixer used by the engine, and setups
+ * the SDL audio subsystem and the callback for the
+ * audio mixer implementation.
+ */
+class Sdl13MixerManager : public SdlMixerManager {
+public:
+ Sdl13MixerManager();
+ virtual ~Sdl13MixerManager();
+
+ /**
+ * Initialize and setups the mixer
+ */
+ virtual void init();
+
+ /**
+ * Pauses the audio system
+ */
+ virtual void suspendAudio();
+
+ /**
+ * Resumes the audio system
+ */
+ virtual int resumeAudio();
+
+protected:
+
+ /**
+ * The opened SDL audio device
+ */
+ SDL_AudioDeviceID _device;
+
+ /**
+ * Starts SDL audio
+ */
+ virtual void startAudio();
+};
+
+#endif
diff --git a/backends/mixer/symbiansdl/symbiansdl-mixer.cpp b/backends/mixer/symbiansdl/symbiansdl-mixer.cpp
index c911a99b61..d4637fdd88 100644
--- a/backends/mixer/symbiansdl/symbiansdl-mixer.cpp
+++ b/backends/mixer/symbiansdl/symbiansdl-mixer.cpp
@@ -72,4 +72,3 @@ void SymbianSdlMixerManager::callbackHandler(byte *samples, int len) {
}
#endif
-
diff --git a/backends/mixer/symbiansdl/symbiansdl-mixer.h b/backends/mixer/symbiansdl/symbiansdl-mixer.h
index e3104e45eb..d59c98753b 100644
--- a/backends/mixer/symbiansdl/symbiansdl-mixer.h
+++ b/backends/mixer/symbiansdl/symbiansdl-mixer.h
@@ -41,4 +41,3 @@ protected:
};
#endif
-
diff --git a/backends/mixer/wincesdl/wincesdl-mixer.cpp b/backends/mixer/wincesdl/wincesdl-mixer.cpp
index 36ac310ad9..db5ab59446 100644
--- a/backends/mixer/wincesdl/wincesdl-mixer.cpp
+++ b/backends/mixer/wincesdl/wincesdl-mixer.cpp
@@ -131,15 +131,20 @@ uint32 WINCESdlMixerManager::compute_sample_rate() {
ConfMan.setBool("FM_medium_quality", true);
ConfMan.flushToDisk();
}
+ } else {
+ if (!ConfMan.hasKey("FM_high_quality") && !ConfMan.hasKey("FM_medium_quality")) {
+ ConfMan.setBool("FM_high_quality", true);
+ ConfMan.flushToDisk();
+ }
}
// See if the output frequency is forced by the game
if (gameid == "ft" || gameid == "dig" || gameid == "comi" || gameid == "queen" || gameid == "sword" || gameid == "agi")
sampleRate = SAMPLES_PER_SEC_NEW;
else {
- if (ConfMan.hasKey("high_sample_rate") && ConfMan.getBool("high_sample_rate"))
- sampleRate = SAMPLES_PER_SEC_NEW;
- else
+ if (ConfMan.hasKey("high_sample_rate") && !ConfMan.getBool("high_sample_rate"))
sampleRate = SAMPLES_PER_SEC_OLD;
+ else
+ sampleRate = SAMPLES_PER_SEC_NEW;
}
#ifdef USE_VORBIS
@@ -182,4 +187,3 @@ bool WINCESdlMixerManager::checkOggHighSampleRate() {
#endif
#endif
-
diff --git a/backends/mixer/wincesdl/wincesdl-mixer.h b/backends/mixer/wincesdl/wincesdl-mixer.h
index 8274d39d1c..fb51f6ac64 100644
--- a/backends/mixer/wincesdl/wincesdl-mixer.h
+++ b/backends/mixer/wincesdl/wincesdl-mixer.h
@@ -47,4 +47,3 @@ private:
};
#endif
-
diff --git a/backends/module.mk b/backends/module.mk
index e568002d40..89cde44536 100644
--- a/backends/module.mk
+++ b/backends/module.mk
@@ -60,14 +60,20 @@ endif
# derive from the SDL backend, and they all need the following files.
ifdef SDL_BACKEND
MODULE_OBJS += \
- audiocd/sdl/sdl-audiocd.o \
events/sdl/sdl-events.o \
+ graphics/sdl/sdl-graphics.o \
graphics/surfacesdl/surfacesdl-graphics.o \
mixer/doublebuffersdl/doublebuffersdl-mixer.o \
mixer/sdl/sdl-mixer.o \
mutex/sdl/sdl-mutex.o \
plugins/sdl/sdl-provider.o \
timer/sdl/sdl-timer.o
+
+# SDL 1.3 removed audio CD support
+ifndef USE_SDL13
+MODULE_OBJS += \
+ audiocd/sdl/sdl-audiocd.o
+endif
endif
ifdef POSIX
@@ -82,7 +88,8 @@ endif
ifdef MACOSX
MODULE_OBJS += \
midi/coreaudio.o \
- midi/coremidi.o
+ midi/coremidi.o \
+ updates/macosx/macosx-updates.o
endif
ifdef WIN32
@@ -101,6 +108,20 @@ MODULE_OBJS += \
midi/camd.o
endif
+ifdef PLAYSTATION3
+MODULE_OBJS += \
+ fs/posix/posix-fs.o \
+ fs/posix/posix-fs-factory.o \
+ fs/ps3/ps3-fs-factory.o \
+ events/ps3sdl/ps3sdl-events.o \
+ mixer/sdl13/sdl13-mixer.o
+endif
+
+ifeq ($(BACKEND),bada)
+MODULE_OBJS += \
+ timer/bada/timer.o
+endif
+
ifeq ($(BACKEND),ds)
MODULE_OBJS += \
fs/ds/ds-fs.o \
@@ -126,6 +147,11 @@ MODULE_OBJS += \
graphics/linuxmotosdl/linuxmotosdl-graphics.o
endif
+ifeq ($(BACKEND),maemo)
+MODULE_OBJS += \
+ events/maemosdl/maemosdl-events.o
+endif
+
ifeq ($(BACKEND),n64)
MODULE_OBJS += \
fs/n64/n64-fs.o \
diff --git a/backends/platform/android/android.cpp b/backends/platform/android/android.cpp
index 17c7d4f9cb..aba31320ea 100644
--- a/backends/platform/android/android.cpp
+++ b/backends/platform/android/android.cpp
@@ -174,6 +174,8 @@ OSystem_Android::~OSystem_Android() {
_mixer = 0;
delete _fsFactory;
_fsFactory = 0;
+ delete _timerManager;
+ _timerManager = 0;
deleteMutex(_event_queue_lock);
}
@@ -602,4 +604,3 @@ void AndroidPluginProvider::addCustomDirectories(Common::FSList &dirs) const {
#endif
#endif
-
diff --git a/backends/platform/android/android.h b/backends/platform/android/android.h
index c2ada2ab77..f39a8f1144 100644
--- a/backends/platform/android/android.h
+++ b/backends/platform/android/android.h
@@ -296,4 +296,3 @@ public:
#endif
#endif
-
diff --git a/backends/platform/android/android.mk b/backends/platform/android/android.mk
index 77fdb139d8..63d194fdc1 100644
--- a/backends/platform/android/android.mk
+++ b/backends/platform/android/android.mk
@@ -189,4 +189,3 @@ androiddistdebug: all
done
.PHONY: androidrelease androidtest
-
diff --git a/backends/platform/android/asset-archive.h b/backends/platform/android/asset-archive.h
index 016e3e31a5..9216412e0a 100644
--- a/backends/platform/android/asset-archive.h
+++ b/backends/platform/android/asset-archive.h
@@ -52,4 +52,3 @@ private:
#endif
#endif
-
diff --git a/backends/platform/android/events.cpp b/backends/platform/android/events.cpp
index cf1d4b173c..2a16e69411 100644
--- a/backends/platform/android/events.cpp
+++ b/backends/platform/android/events.cpp
@@ -820,4 +820,3 @@ bool OSystem_Android::pollEvent(Common::Event &event) {
}
#endif
-
diff --git a/backends/platform/android/gfx.cpp b/backends/platform/android/gfx.cpp
index b8a9e74437..8bc914f567 100644
--- a/backends/platform/android/gfx.cpp
+++ b/backends/platform/android/gfx.cpp
@@ -826,4 +826,3 @@ void OSystem_Android::disableCursorPalette() {
}
#endif
-
diff --git a/backends/platform/android/jni.cpp b/backends/platform/android/jni.cpp
index c4daf24e16..b44a585528 100644
--- a/backends/platform/android/jni.cpp
+++ b/backends/platform/android/jni.cpp
@@ -22,8 +22,9 @@
#if defined(__ANDROID__)
-// Allow use of stuff in <time.h>
+// Allow use of stuff in <time.h> and abort()
#define FORBIDDEN_SYMBOL_EXCEPTION_time_h
+#define FORBIDDEN_SYMBOL_EXCEPTION_abort
// Disable printf override in common/forbidden.h to avoid
// clashes with log.h from the Android SDK.
@@ -618,4 +619,3 @@ void JNI::setPause(JNIEnv *env, jobject self, jboolean value) {
}
#endif
-
diff --git a/backends/platform/android/jni.h b/backends/platform/android/jni.h
index 1abecf0a37..52698e0f35 100644
--- a/backends/platform/android/jni.h
+++ b/backends/platform/android/jni.h
@@ -145,4 +145,3 @@ inline int JNI::writeAudio(JNIEnv *env, jbyteArray &data, int offset, int size)
#endif
#endif
-
diff --git a/backends/platform/android/module.mk b/backends/platform/android/module.mk
index 2fe4b40585..de5fe98a53 100644
--- a/backends/platform/android/module.mk
+++ b/backends/platform/android/module.mk
@@ -12,4 +12,3 @@ MODULE_OBJS := \
MODULE_OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS))
OBJS := $(MODULE_OBJS) $(OBJS)
MODULE_DIRS += $(sort $(dir $(MODULE_OBJS)))
-
diff --git a/backends/platform/android/org/inodes/gus/scummvm/EditableSurfaceView.java b/backends/platform/android/org/inodes/gus/scummvm/EditableSurfaceView.java
index cede7eedd4..3aef14b851 100644
--- a/backends/platform/android/org/inodes/gus/scummvm/EditableSurfaceView.java
+++ b/backends/platform/android/org/inodes/gus/scummvm/EditableSurfaceView.java
@@ -59,4 +59,3 @@ public class EditableSurfaceView extends SurfaceView {
return new MyInputConnection();
}
}
-
diff --git a/backends/platform/android/org/inodes/gus/scummvm/PluginProvider.java b/backends/platform/android/org/inodes/gus/scummvm/PluginProvider.java
index 3c91d9f5dc..d90b7b2c68 100644
--- a/backends/platform/android/org/inodes/gus/scummvm/PluginProvider.java
+++ b/backends/platform/android/org/inodes/gus/scummvm/PluginProvider.java
@@ -51,4 +51,3 @@ public class PluginProvider extends BroadcastReceiver {
setResultExtras(extras);
}
}
-
diff --git a/backends/platform/android/org/inodes/gus/scummvm/ScummVM.java b/backends/platform/android/org/inodes/gus/scummvm/ScummVM.java
index ef9f4cc1e0..246a02c9be 100644
--- a/backends/platform/android/org/inodes/gus/scummvm/ScummVM.java
+++ b/backends/platform/android/org/inodes/gus/scummvm/ScummVM.java
@@ -449,4 +449,3 @@ public abstract class ScummVM implements SurfaceHolder.Callback, Runnable {
System.load(libpath.getPath());
}
}
-
diff --git a/backends/platform/android/org/inodes/gus/scummvm/ScummVMActivity.java b/backends/platform/android/org/inodes/gus/scummvm/ScummVMActivity.java
index 1978b690d0..ce4e016322 100644
--- a/backends/platform/android/org/inodes/gus/scummvm/ScummVMActivity.java
+++ b/backends/platform/android/org/inodes/gus/scummvm/ScummVMActivity.java
@@ -222,4 +222,3 @@ public class ScummVMActivity extends Activity {
InputMethodManager.HIDE_IMPLICIT_ONLY);
}
}
-
diff --git a/backends/platform/android/org/inodes/gus/scummvm/ScummVMApplication.java b/backends/platform/android/org/inodes/gus/scummvm/ScummVMApplication.java
index f9eec72eac..8ab7d1a084 100644
--- a/backends/platform/android/org/inodes/gus/scummvm/ScummVMApplication.java
+++ b/backends/platform/android/org/inodes/gus/scummvm/ScummVMApplication.java
@@ -28,4 +28,3 @@ public class ScummVMApplication extends Application {
return _cache_dir;
}
}
-
diff --git a/backends/platform/android/org/inodes/gus/scummvm/ScummVMEvents.java b/backends/platform/android/org/inodes/gus/scummvm/ScummVMEvents.java
index 2d5c100a1c..175ff0b677 100644
--- a/backends/platform/android/org/inodes/gus/scummvm/ScummVMEvents.java
+++ b/backends/platform/android/org/inodes/gus/scummvm/ScummVMEvents.java
@@ -229,4 +229,3 @@ public class ScummVMEvents implements
return true;
}
}
-
diff --git a/backends/platform/android/org/inodes/gus/scummvm/Unpacker.java b/backends/platform/android/org/inodes/gus/scummvm/Unpacker.java
index c4b2ad7f5d..6cc7f8eadb 100644
--- a/backends/platform/android/org/inodes/gus/scummvm/Unpacker.java
+++ b/backends/platform/android/org/inodes/gus/scummvm/Unpacker.java
@@ -44,6 +44,9 @@ public class Unpacker extends Activity {
private AsyncTask<String, Integer, Void> mUnpacker;
private final static int REQUEST_MARKET = 1;
+ // Android 3.1+ only
+ public static final int FLAG_INCLUDE_STOPPED_PACKAGES = 32;
+
private static class UnpackJob {
public ZipFile zipfile;
public Set<String> paths;
@@ -273,6 +276,9 @@ public class Unpacker extends Activity {
unpack_libs);
Intent intent = new Intent(ScummVMApplication.ACTION_PLUGIN_QUERY);
+ // Android 3.1 defaults to FLAG_EXCLUDE_STOPPED_PACKAGES, and since
+ // none of our plugins will ever be running, that is not helpful
+ intent.setFlags(FLAG_INCLUDE_STOPPED_PACKAGES);
sendOrderedBroadcast(intent, Manifest.permission.SCUMMVM_PLUGIN,
new PluginBroadcastReciever(),
null, RESULT_OK, null, extras);
@@ -370,4 +376,3 @@ public class Unpacker extends Activity {
}
}
}
-
diff --git a/backends/platform/android/texture.cpp b/backends/platform/android/texture.cpp
index e993ed6794..53b4d1cc59 100644
--- a/backends/platform/android/texture.cpp
+++ b/backends/platform/android/texture.cpp
@@ -488,4 +488,3 @@ GLESFakePalette5551Texture::~GLESFakePalette5551Texture() {
}
#endif
-
diff --git a/backends/platform/android/texture.h b/backends/platform/android/texture.h
index dd34ba9d88..4307b5a1bc 100644
--- a/backends/platform/android/texture.h
+++ b/backends/platform/android/texture.h
@@ -271,4 +271,3 @@ public:
#endif
#endif
-
diff --git a/backends/platform/bada/README.TXT b/backends/platform/bada/README.TXT
new file mode 100644
index 0000000000..c4a04d5450
--- /dev/null
+++ b/backends/platform/bada/README.TXT
@@ -0,0 +1,92 @@
+Build instructions:
+
+1. Install BADA SDK (requires free registration):
+
+ http://developer.bada.com/apis/index.do
+
+2. Install Cygwin:
+
+ http://www.cygwin.com/
+
+ Add the following to your cygwin .bash_profile:
+
+ alias mmake=/cygdrive/c/MinGW/bin/mingw32-make.exe
+ export BADA_SDK=/cygdrive/c/bada/1.2.1
+ export ARM_BIN=c:/bada/1.2.1/Tools/Toolchains/ARM/bin
+ export CPPFLAGS="-fpic -fshort-wchar -mcpu=cortex-a8 -mfpu=vfpv3 \
+ -mfloat-abi=hard -mlittle-endian -mthumb-interwork -Wno-psabi \
+ -fno-strict-aliasing -fno-short-enums"
+ export LDFLAGS="-nostdlib -lc-newlib -lm-newlib -LC:/bada/1.2.1/Model/Wave_LP1/Target"
+ #export PATH=${BADA_SDK}/Tools/Toolchains/Win32/bin:${PATH}
+ export PATH=${BADA_SDK}/Tools/Toolchains/ARM/bin:~/utils:${PATH}
+ alias gcc=${ARM_BIN}/arm-samsung-nucleuseabi-gcc.exe
+ alias ar=${ARM_BIN}/arm-samsung-nucleuseabi-ar.exe
+
+ The following were added to ~/utils for zlib:
+
+ ar:
+ #!/bin/sh
+ ${ARM_BIN}/arm-samsung-nucleuseabi-ar.exe $*
+
+ gcc:
+ #!/bin/sh
+ ${ARM_BIN}/arm-samsung-nucleuseabi-gcc.exe $*
+
+3. Build dependencies
+
+ zlib, libogg, libvorbis, libmad, FLAC
+
+ see: "Building the libraries" under:
+ http://wiki.scummvm.org/index.php/Compiling_ScummVM/MinGW#Building_the_libraries
+ for instructions on how to obtain these modules
+
+ 3.1 For Target-Release configure ogg and mad with:
+
+ ./configure --host=arm-samsung-nucleuseabi --disable-shared
+
+ when building vorbis and flac:
+
+ ./configure --host=arm-samsung-nucleuseabi --disable-shared --with-ogg=c:/cygwin/usr/local
+
+ 3.2 for each module, after a successful configure, add the following
+ to the generated config.h (gzguts.h for zlib)
+
+ #undef __MINGW32__
+ #undef _WIN32
+ #include "c:/src/scummvm/backends/platform/bada/portdefs.h"
+
+ 3.3 Additional post configure edits:
+
+ - removed -fforce-mem from the libMAD Makefile
+ - in libvorbis/lib/Makefile comment lines with vorbis_selftests
+ - edit libFLAC/Makefile ... CFLAGS = $(OGG_CFLAGS)
+
+ Note: you can ignore the ranlib errors when doing make install.
+
+4. Build the ScummVM base library:
+
+ ./configure --host=bada --enable-release
+
+ To target the Win32 simulator:
+
+ ./configure --host=bada --enable-debug
+
+5. Build the front end application using BADA-Ide:
+
+ Copy the scummvm/dists/bada folder into a clean directory
+ outside of the scummvm package. Start the BADA IDE then
+ choose this folder as the eclipse workspace. Click
+ Project / Build.
+
+Links:
+
+A short turorial on implementing OpenGL ES 1.1 in BADA:
+ http://forums.badadev.com/viewtopic.php?f=7&t=208
+
+HelvB14 font files:
+ http://www.cl.cam.ac.uk/~mgk25/ucs-fonts.html
+ http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts-75dpi100dpi.tar.gz
+
+ Then run the following command:
+ $ ./ucs2any.pl 100dpi/helvB14.bdf MAPPINGS/8859-1.TXT iso8859-1 \
+ MAPPINGS/8859-2.TXT iso8859-2 MAPPINGS/8859-3.TXT iso8859-3
diff --git a/backends/platform/bada/application.cpp b/backends/platform/bada/application.cpp
new file mode 100644
index 0000000000..bf585d2782
--- /dev/null
+++ b/backends/platform/bada/application.cpp
@@ -0,0 +1,111 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "engines/engine.h"
+
+#include "backends/platform/bada/form.h"
+#include "backends/platform/bada/system.h"
+#include "backends/platform/bada/application.h"
+
+using namespace Osp::System;
+using namespace Osp::Ui::Controls;
+
+Application *BadaScummVM::createInstance() {
+ return new BadaScummVM();
+}
+
+BadaScummVM::BadaScummVM() : _appForm(0) {
+}
+
+BadaScummVM::~BadaScummVM() {
+ logEntered();
+ if (g_system) {
+ BadaSystem *system = (BadaSystem *)g_system;
+ system->destroyBackend();
+ delete system;
+ g_system = 0;
+ }
+}
+
+bool BadaScummVM::OnAppInitializing(AppRegistry &appRegistry) {
+ _appForm = systemStart(this);
+ return (_appForm != NULL);
+}
+
+bool BadaScummVM::OnAppTerminating(AppRegistry &appRegistry,
+ bool forcedTermination) {
+ logEntered();
+ return true;
+}
+
+void BadaScummVM::OnUserEventReceivedN(RequestId requestId,
+ Osp::Base::Collection::IList *args) {
+ logEntered();
+
+ if (requestId == USER_MESSAGE_EXIT) {
+ // normal program termination
+ Terminate();
+ } else if (requestId == USER_MESSAGE_EXIT_ERR) {
+ // assertion failure termination
+ String *message = NULL;
+ if (args) {
+ message = (String*)args->GetAt(0);
+ }
+ if (!message) {
+ message = new String("Unknown error");
+ }
+
+ MessageBox messageBox;
+ messageBox.Construct(L"Oops...", *message, MSGBOX_STYLE_OK);
+ int modalResult;
+ messageBox.ShowAndWait(modalResult);
+ Terminate();
+ }
+}
+
+void BadaScummVM::OnForeground(void) {
+ logEntered();
+ pauseGame(false);
+}
+
+void BadaScummVM::OnBackground(void) {
+ logEntered();
+ pauseGame(true);
+}
+
+void BadaScummVM::OnBatteryLevelChanged(BatteryLevel batteryLevel) {
+}
+
+void BadaScummVM::OnLowMemory(void) {
+}
+
+void BadaScummVM::pauseGame(bool pause) {
+ if (_appForm) {
+ if (pause && g_engine && !g_engine->isPaused()) {
+ _appForm->pushKey(Common::KEYCODE_SPACE);
+ }
+
+ if (g_system) {
+ ((BadaSystem *)g_system)->setMute(pause);
+ }
+ }
+}
diff --git a/backends/platform/bada/application.h b/backends/platform/bada/application.h
new file mode 100644
index 0000000000..2b0d37f1ef
--- /dev/null
+++ b/backends/platform/bada/application.h
@@ -0,0 +1,54 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef BADA_APPLICATION_H
+#define BADA_APPLICATION_H
+
+#include <FBase.h>
+#include <FApp.h>
+#include <FGraphics.h>
+#include <FUi.h>
+#include <FSystem.h>
+
+#include "backends/platform/bada/system.h"
+
+class BadaScummVM : public Osp::App::Application {
+public:
+ BadaScummVM();
+ ~BadaScummVM();
+
+ static Osp::App::Application *createInstance(void);
+
+ bool OnAppInitializing(Osp::App::AppRegistry &appRegistry);
+ bool OnAppTerminating(Osp::App::AppRegistry &appRegistry, bool forcedTermination = false);
+ void OnForeground(void);
+ void OnBackground(void);
+ void OnLowMemory(void);
+ void OnBatteryLevelChanged(Osp::System::BatteryLevel batteryLevel);
+ void OnUserEventReceivedN(RequestId requestId, Osp::Base::Collection::IList *pArgs);
+
+private:
+ void pauseGame(bool pause);
+ BadaAppForm *_appForm;
+};
+
+#endif
diff --git a/backends/platform/bada/audio.cpp b/backends/platform/bada/audio.cpp
new file mode 100644
index 0000000000..b868e91357
--- /dev/null
+++ b/backends/platform/bada/audio.cpp
@@ -0,0 +1,260 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include <FSysSettingInfo.h>
+#include <FAppAppRegistry.h>
+
+#include "backends/platform/bada/audio.h"
+#include "backends/platform/bada/system.h"
+
+#define TIMER_INCREMENT 10
+#define TIMER_INTERVAL 40
+#define MIN_TIMER_INTERVAL 10
+#define MAX_TIMER_INTERVAL 160
+#define INIT_LEVEL 3
+#define CONFIG_KEY L"audiovol"
+
+// sound level pre-sets
+const int levels[] = {0, 1, 10, 45, 70, 99};
+
+AudioThread::AudioThread() :
+ _mixer(0),
+ _timer(0),
+ _audioOut(0),
+ _head(0),
+ _tail(0),
+ _ready(0),
+ _interval(TIMER_INTERVAL),
+ _playing(-1),
+ _muted(true) {
+}
+
+Audio::MixerImpl *AudioThread::Construct(OSystem *system) {
+ logEntered();
+
+ if (IsFailed(Thread::Construct(THREAD_TYPE_EVENT_DRIVEN,
+ DEFAULT_STACK_SIZE,
+ THREAD_PRIORITY_HIGH))) {
+ AppLog("Failed to create AudioThread");
+ return NULL;
+ }
+
+ _mixer = new Audio::MixerImpl(system, 44100);
+ return _mixer;
+}
+
+AudioThread::~AudioThread() {
+ logEntered();
+}
+
+bool AudioThread::isSilentMode() {
+ bool silentMode;
+ String key(L"SilentMode");
+ Osp::System::SettingInfo::GetValue(key, silentMode);
+ return silentMode;
+}
+
+void AudioThread::setMute(bool on) {
+ if (_audioOut && _timer) {
+ _muted = on;
+ if (on) {
+ _timer->Cancel();
+ } else {
+ _timer->Start(_interval);
+ }
+ }
+}
+
+int AudioThread::setVolume(bool up, bool minMax) {
+ int level = -1;
+ int numLevels = sizeof(levels) / sizeof(levels[0]);
+
+ if (_audioOut) {
+ int volume = _audioOut->GetVolume();
+ if (minMax) {
+ level = up ? numLevels - 1 : 0;
+ volume = levels[level];
+ } else {
+ // adjust volume to be one of the preset values
+ for (int i = 0; i < numLevels && level == -1; i++) {
+ if (volume == levels[i]) {
+ level = i;
+ if (up) {
+ if (i + 1 < numLevels) {
+ level = i + 1;
+ }
+ } else if (i > 0) {
+ level = i - 1;
+ }
+ }
+ }
+
+ // default to INIT_LEVEL when current not preset value
+ if (level == -1) {
+ level = INIT_LEVEL;
+ }
+ volume = levels[level];
+ }
+
+ _audioOut->SetVolume(volume);
+
+ // remember the chosen setting
+ AppRegistry *registry = Application::GetInstance()->GetAppRegistry();
+ if (registry) {
+ registry->Set(CONFIG_KEY, volume);
+ }
+ }
+ return level;
+}
+
+bool AudioThread::OnStart(void) {
+ logEntered();
+
+ _audioOut = new Osp::Media::AudioOut();
+ if (!_audioOut ||
+ IsFailed(_audioOut->Construct(*this))) {
+ AppLog("Failed to create AudioOut");
+ return false;
+ }
+
+ int sampleRate = _mixer->getOutputRate();
+
+ // ideally we would update _mixer with GetOptimizedSampleRate here
+ if (_audioOut->GetOptimizedSampleRate() != sampleRate) {
+ AppLog("Non optimal sample rate %d", _audioOut->GetOptimizedSampleRate());
+ }
+
+ if (IsFailed(_audioOut->Prepare(AUDIO_TYPE_PCM_S16_LE,
+ AUDIO_CHANNEL_TYPE_STEREO,
+ sampleRate))) {
+ AppLog("Failed to prepare AudioOut %d", sampleRate);
+ return false;
+ }
+
+ int bufferSize = _audioOut->GetMinBufferSize();
+ for (int i = 0; i < NUM_AUDIO_BUFFERS; i++) {
+ if (IsFailed(_audioBuffer[i].Construct(bufferSize))) {
+ AppLog("Failed to create audio buffer");
+ return false;
+ }
+ }
+
+ _timer = new Timer();
+ if (!_timer || IsFailed(_timer->Construct(*this))) {
+ AppLog("Failed to create audio timer");
+ return false;
+ }
+
+ if (IsFailed(_timer->Start(_interval))) {
+ AppLog("failed to start audio timer");
+ return false;
+ }
+
+ // get the volume from the app-registry
+ int volume = levels[INIT_LEVEL];
+ AppRegistry *registry = Application::GetInstance()->GetAppRegistry();
+ if (registry) {
+ if (E_KEY_NOT_FOUND == registry->Get(CONFIG_KEY, volume)) {
+ registry->Add(CONFIG_KEY, volume);
+ volume = levels[INIT_LEVEL];
+ } else {
+ AppLog("Setting volume: %d", volume);
+ }
+ }
+
+ _muted = false;
+ _mixer->setReady(true);
+ _audioOut->SetVolume(isSilentMode() ? 0 : volume);
+ _audioOut->Start();
+ return true;
+}
+
+void AudioThread::OnStop(void) {
+ logEntered();
+
+ _mixer->setReady(false);
+
+ if (_timer) {
+ if (!_muted) {
+ _timer->Cancel();
+ }
+ delete _timer;
+ }
+
+ if (_audioOut) {
+ _audioOut->Reset();
+ delete _audioOut;
+ }
+}
+
+void AudioThread::OnAudioOutErrorOccurred(Osp::Media::AudioOut &src, result r) {
+ logEntered();
+}
+
+void AudioThread::OnAudioOutInterrupted(Osp::Media::AudioOut &src) {
+ logEntered();
+}
+
+void AudioThread::OnAudioOutReleased(Osp::Media::AudioOut &src) {
+ logEntered();
+ _audioOut->Start();
+}
+
+void AudioThread::OnAudioOutBufferEndReached(Osp::Media::AudioOut &src) {
+ if (_ready > 0) {
+ _playing = _tail;
+ _audioOut->WriteBuffer(_audioBuffer[_tail]);
+ _tail = (_tail + 1) % NUM_AUDIO_BUFFERS;
+ _ready--;
+ } else {
+ // audio buffer empty: decrease timer inverval
+ _playing = -1;
+ _interval -= TIMER_INCREMENT;
+ if (_interval < MIN_TIMER_INTERVAL) {
+ _interval = MIN_TIMER_INTERVAL;
+ }
+ }
+}
+
+void AudioThread::OnTimerExpired(Timer &timer) {
+ if (_ready < NUM_AUDIO_BUFFERS) {
+ uint len = _audioBuffer[_head].GetCapacity();
+ int samples = _mixer->mixCallback((byte*)_audioBuffer[_head].GetPointer(), len);
+ if (samples) {
+ _head = (_head + 1) % NUM_AUDIO_BUFFERS;
+ _ready++;
+ }
+ } else {
+ // audio buffer full: increase timer inverval
+ _interval += TIMER_INCREMENT;
+ if (_interval > MAX_TIMER_INTERVAL) {
+ _interval = MAX_TIMER_INTERVAL;
+ }
+ }
+
+ if (_ready && _playing == -1) {
+ OnAudioOutBufferEndReached(*_audioOut);
+ }
+
+ _timer->Start(_interval);
+}
+
diff --git a/backends/platform/bada/audio.h b/backends/platform/bada/audio.h
new file mode 100644
index 0000000000..72c537a942
--- /dev/null
+++ b/backends/platform/bada/audio.h
@@ -0,0 +1,73 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef BADA_AUDIO_H
+#define BADA_AUDIO_H
+
+#include <FBase.h>
+#include <FMedia.h>
+#include <FIo.h>
+#include <FBaseByteBuffer.h>
+
+#include "config.h"
+#include "common/scummsys.h"
+#include "common/system.h"
+#include "audio/mixer_intern.h"
+
+using namespace Osp::Base;
+using namespace Osp::Base::Collection;
+using namespace Osp::Base::Runtime;
+using namespace Osp::Media;
+using namespace Osp::Io;
+
+#define NUM_AUDIO_BUFFERS 2
+
+class AudioThread: public Osp::Media::IAudioOutEventListener,
+ public Osp::Base::Runtime::ITimerEventListener,
+ public Osp::Base::Runtime::Thread {
+public:
+ AudioThread(void);
+ ~AudioThread(void);
+
+ Audio::MixerImpl *Construct(OSystem *system);
+ bool isSilentMode();
+ void setMute(bool on);
+ int setVolume(bool up, bool minMax);
+
+ bool OnStart(void);
+ void OnStop(void);
+ void OnAudioOutErrorOccurred(Osp::Media::AudioOut &src, result r);
+ void OnAudioOutInterrupted(Osp::Media::AudioOut &src);
+ void OnAudioOutReleased(Osp::Media::AudioOut &src);
+ void OnAudioOutBufferEndReached(Osp::Media::AudioOut &src);
+ void OnTimerExpired(Timer &timer);
+
+private:
+ Audio::MixerImpl *_mixer;
+ Osp::Base::Runtime::Timer *_timer;
+ Osp::Media::AudioOut *_audioOut;
+ Osp::Base::ByteBuffer _audioBuffer[NUM_AUDIO_BUFFERS];
+ int _head, _tail, _ready, _interval, _playing;
+ bool _muted;
+};
+
+#endif
diff --git a/backends/platform/bada/bada.mk b/backends/platform/bada/bada.mk
new file mode 100644
index 0000000000..7c72d7752b
--- /dev/null
+++ b/backends/platform/bada/bada.mk
@@ -0,0 +1,5 @@
+# Bada specific modules are built under eclipse
+
+$(EXECUTABLE): $(OBJS)
+ rm -f $@
+ ar Tru $@ $(OBJS)
diff --git a/backends/platform/bada/form.cpp b/backends/platform/bada/form.cpp
new file mode 100644
index 0000000000..dfa72bce08
--- /dev/null
+++ b/backends/platform/bada/form.cpp
@@ -0,0 +1,464 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include <FAppApplication.h>
+
+#include "common/translation.h"
+#include "base/main.h"
+
+#include "backends/platform/bada/form.h"
+#include "backends/platform/bada/system.h"
+
+using namespace Osp::Base::Runtime;
+using namespace Osp::Ui;
+using namespace Osp::Ui::Controls;
+
+// number of volume levels
+#define LEVEL_RANGE 5
+
+// round down small Y touch values to 1 to allow the
+// cursor to be positioned at the top of the screen
+#define MIN_TOUCH_Y 10
+
+// block for up to 2.5 seconds during shutdown to
+// allow the game thread to exit gracefully.
+#define EXIT_SLEEP_STEP 10
+#define EXIT_SLEEP 250
+
+//
+// BadaAppForm
+//
+BadaAppForm::BadaAppForm() :
+ _gameThread(0),
+ _state(kInitState),
+ _buttonState(kLeftButton),
+ _shortcut(kSetVolume) {
+ _eventQueueLock = new Mutex();
+ _eventQueueLock->Create();
+}
+
+result BadaAppForm::Construct() {
+ result r = Form::Construct(Controls::FORM_STYLE_NORMAL);
+ if (IsFailed(r)) {
+ return r;
+ }
+
+ BadaSystem *badaSystem = NULL;
+ _gameThread = NULL;
+
+ badaSystem = new BadaSystem(this);
+ r = badaSystem != NULL ? E_SUCCESS : E_OUT_OF_MEMORY;
+
+ if (!IsFailed(r)) {
+ r = badaSystem->Construct();
+ }
+
+ if (!IsFailed(r)) {
+ _gameThread = new Thread();
+ r = _gameThread != NULL ? E_SUCCESS : E_OUT_OF_MEMORY;
+ }
+
+ if (!IsFailed(r)) {
+ r = _gameThread->Construct(*this);
+ }
+
+ if (IsFailed(r)) {
+ if (badaSystem != NULL) {
+ delete badaSystem;
+ }
+ if (_gameThread != NULL) {
+ delete _gameThread;
+ _gameThread = NULL;
+ }
+ } else {
+ g_system = badaSystem;
+ }
+
+ return r;
+}
+
+BadaAppForm::~BadaAppForm() {
+ logEntered();
+
+ if (_gameThread && _state != kErrorState) {
+ terminate();
+
+ _gameThread->Stop();
+ if (_state != kErrorState) {
+ _gameThread->Join();
+ }
+
+ delete _gameThread;
+ _gameThread = NULL;
+ }
+
+ if (_eventQueueLock) {
+ delete _eventQueueLock;
+ _eventQueueLock = NULL;
+ }
+
+ logLeaving();
+}
+
+//
+// abort the game thread
+//
+void BadaAppForm::terminate() {
+ if (_state == kActiveState) {
+ ((BadaSystem *)g_system)->setMute(true);
+
+ _eventQueueLock->Acquire();
+
+ Common::Event e;
+ e.type = Common::EVENT_QUIT;
+ _eventQueue.push(e);
+ _state = kClosingState;
+
+ _eventQueueLock->Release();
+
+ // block while thread ends
+ AppLog("waiting for shutdown");
+ for (int i = 0; i < EXIT_SLEEP_STEP && _state == kClosingState; i++) {
+ Thread::Sleep(EXIT_SLEEP);
+ }
+
+ if (_state == kClosingState) {
+ // failed to terminate - Join() will freeze
+ _state = kErrorState;
+ }
+ }
+}
+
+void BadaAppForm::exitSystem() {
+ _state = kErrorState;
+
+ if (_gameThread) {
+ _gameThread->Stop();
+ delete _gameThread;
+ _gameThread = NULL;
+ }
+}
+
+result BadaAppForm::OnInitializing(void) {
+ logEntered();
+
+ SetOrientation(ORIENTATION_LANDSCAPE);
+ AddOrientationEventListener(*this);
+ AddTouchEventListener(*this);
+ AddKeyEventListener(*this);
+
+ // set focus to enable receiving key events
+ SetFocusable(true);
+ SetFocus();
+
+ return E_SUCCESS;
+}
+
+result BadaAppForm::OnDraw(void) {
+ logEntered();
+
+ if (g_system) {
+ BadaSystem *system = (BadaSystem *)g_system;
+ BadaGraphicsManager *graphics = system->getGraphics();
+ if (graphics && graphics->isReady()) {
+ g_system->updateScreen();
+ }
+ }
+
+ return E_SUCCESS;
+}
+
+bool BadaAppForm::pollEvent(Common::Event &event) {
+ bool result = false;
+
+ _eventQueueLock->Acquire();
+ if (!_eventQueue.empty()) {
+ event = _eventQueue.pop();
+ result = true;
+ }
+ _eventQueueLock->Release();
+
+ return result;
+}
+
+void BadaAppForm::pushEvent(Common::EventType type, const Point &currentPosition) {
+ BadaSystem *system = (BadaSystem *)g_system;
+ BadaGraphicsManager *graphics = system->getGraphics();
+ if (graphics) {
+ // graphics could be NULL at startup or when
+ // displaying the system error screen
+ Common::Event e;
+ e.type = type;
+ e.mouse.x = currentPosition.x;
+ e.mouse.y = currentPosition.y > MIN_TOUCH_Y ? currentPosition.y : 1;
+
+ bool moved = graphics->moveMouse(e.mouse.x, e.mouse.y);
+
+ _eventQueueLock->Acquire();
+
+ if (moved && type != Common::EVENT_MOUSEMOVE) {
+ Common::Event moveEvent;
+ moveEvent.type = Common::EVENT_MOUSEMOVE;
+ moveEvent.mouse = e.mouse;
+ _eventQueue.push(moveEvent);
+ }
+
+ _eventQueue.push(e);
+ _eventQueueLock->Release();
+ }
+}
+
+void BadaAppForm::pushKey(Common::KeyCode keycode) {
+ Common::Event e;
+ e.synthetic = false;
+ e.kbd.keycode = keycode;
+ e.kbd.ascii = keycode;
+ e.kbd.flags = 0;
+
+ _eventQueueLock->Acquire();
+
+ e.type = Common::EVENT_KEYDOWN;
+ _eventQueue.push(e);
+ e.type = Common::EVENT_KEYUP;
+ _eventQueue.push(e);
+
+ _eventQueueLock->Release();
+}
+
+void BadaAppForm::OnOrientationChanged(const Control &source,
+ OrientationStatus orientationStatus) {
+ logEntered();
+ if (_state == kInitState) {
+ _state = kActiveState;
+ _gameThread->Start();
+ }
+}
+
+Object *BadaAppForm::Run(void) {
+ scummvm_main(0, 0);
+
+ if (_state == kActiveState) {
+ Application::GetInstance()->SendUserEvent(USER_MESSAGE_EXIT, NULL);
+ }
+ _state = kDoneState;
+ return NULL;
+}
+
+void BadaAppForm::setButtonShortcut() {
+ switch (_buttonState) {
+ case kLeftButton:
+ g_system->displayMessageOnOSD(_("Right Click Once"));
+ _buttonState = kRightButtonOnce;
+ break;
+ case kRightButtonOnce:
+ g_system->displayMessageOnOSD(_("Right Click"));
+ _buttonState = kRightButton;
+ break;
+ case kRightButton:
+ g_system->displayMessageOnOSD(_("Move Only"));
+ _buttonState = kMoveOnly;
+ break;
+ case kMoveOnly:
+ g_system->displayMessageOnOSD(_("Left Click"));
+ _buttonState = kLeftButton;
+ break;
+ }
+}
+
+void BadaAppForm::setShortcut() {
+ // cycle to the next shortcut
+ switch (_shortcut) {
+ case kControlMouse:
+ g_system->displayMessageOnOSD(_("Escape Key"));
+ _shortcut = kEscapeKey;
+ break;
+
+ case kEscapeKey:
+ g_system->displayMessageOnOSD(_("Game Menu"));
+ _shortcut = kGameMenu;
+ break;
+
+ case kGameMenu:
+ g_system->displayMessageOnOSD(_("Show Keypad"));
+ _shortcut = kShowKeypad;
+ break;
+
+ case kSetVolume:
+ // fallthru
+
+ case kShowKeypad:
+ g_system->displayMessageOnOSD(_("Control Mouse"));
+ _shortcut = kControlMouse;
+ break;
+ }
+}
+
+void BadaAppForm::setVolume(bool up, bool minMax) {
+ int level = ((BadaSystem *)g_system)->setVolume(up, minMax);
+ if (level != -1) {
+ char message[32];
+ char ind[LEVEL_RANGE]; // 1..5 (0=off)
+ int j = LEVEL_RANGE - 1; // 0..4
+ for (int i = 1; i <= LEVEL_RANGE; i++) {
+ ind[j--] = level >= i ? '|' : ' ';
+ }
+ snprintf(message, sizeof(message), "Volume: [ %c%c%c%c%c ]",
+ ind[0], ind[1], ind[2], ind[3], ind[4]);
+ g_system->displayMessageOnOSD(message);
+ }
+}
+
+void BadaAppForm::showKeypad() {
+ // display the soft keyboard
+ _buttonState = kLeftButton;
+ pushKey(Common::KEYCODE_F7);
+}
+
+void BadaAppForm::OnTouchDoublePressed(const Control &source,
+ const Point &currentPosition,
+ const TouchEventInfo &touchInfo) {
+ if (_buttonState != kMoveOnly) {
+ pushEvent(_buttonState == kLeftButton ? Common::EVENT_LBUTTONDOWN : Common::EVENT_RBUTTONDOWN,
+ currentPosition);
+ pushEvent(_buttonState == kLeftButton ? Common::EVENT_LBUTTONDOWN : Common::EVENT_RBUTTONDOWN,
+ currentPosition);
+ }
+}
+
+void BadaAppForm::OnTouchFocusIn(const Control &source,
+ const Point &currentPosition,
+ const TouchEventInfo &touchInfo) {
+}
+
+void BadaAppForm::OnTouchFocusOut(const Control &source,
+ const Point &currentPosition,
+ const TouchEventInfo &touchInfo) {
+}
+
+void BadaAppForm::OnTouchLongPressed(const Control &source,
+ const Point &currentPosition,
+ const TouchEventInfo &touchInfo) {
+ if (_buttonState != kLeftButton) {
+ pushKey(Common::KEYCODE_RETURN);
+ }
+}
+
+void BadaAppForm::OnTouchMoved(const Control &source,
+ const Point &currentPosition,
+ const TouchEventInfo &touchInfo) {
+ pushEvent(Common::EVENT_MOUSEMOVE, currentPosition);
+}
+
+void BadaAppForm::OnTouchPressed(const Control &source,
+ const Point &currentPosition,
+ const TouchEventInfo &touchInfo) {
+ if (_buttonState != kMoveOnly) {
+ pushEvent(_buttonState == kLeftButton ? Common::EVENT_LBUTTONDOWN : Common::EVENT_RBUTTONDOWN,
+ currentPosition);
+ }
+}
+
+void BadaAppForm::OnTouchReleased(const Control &source,
+ const Point &currentPosition,
+ const TouchEventInfo &touchInfo) {
+ if (_buttonState != kMoveOnly) {
+ pushEvent(_buttonState == kLeftButton ? Common::EVENT_LBUTTONUP : Common::EVENT_RBUTTONUP,
+ currentPosition);
+ if (_buttonState == kRightButtonOnce) {
+ _buttonState = kLeftButton;
+ }
+ // flick to skip dialog
+ if (touchInfo.IsFlicked()) {
+ pushKey(Common::KEYCODE_PERIOD);
+ }
+ }
+}
+
+void BadaAppForm::OnKeyLongPressed(const Control &source, KeyCode keyCode) {
+ logEntered();
+ switch (keyCode) {
+ case KEY_SIDE_UP:
+ _shortcut = kSetVolume;
+ setVolume(true, true);
+ return;
+
+ case KEY_SIDE_DOWN:
+ _shortcut = kSetVolume;
+ setVolume(false, true);
+ return;
+
+ case KEY_CAMERA:
+ _shortcut = kShowKeypad;
+ showKeypad();
+ return;
+
+ default:
+ break;
+ }
+}
+
+void BadaAppForm::OnKeyPressed(const Control &source, KeyCode keyCode) {
+ switch (keyCode) {
+ case KEY_SIDE_UP:
+ if (_shortcut != kSetVolume) {
+ _shortcut = kSetVolume;
+ } else {
+ setVolume(true, false);
+ }
+ return;
+
+ case KEY_SIDE_DOWN:
+ switch (_shortcut) {
+ case kControlMouse:
+ setButtonShortcut();
+ break;
+
+ case kEscapeKey:
+ pushKey(Common::KEYCODE_ESCAPE);
+ break;
+
+ case kGameMenu:
+ _buttonState = kLeftButton;
+ pushKey(Common::KEYCODE_F5);
+ break;
+
+ case kShowKeypad:
+ showKeypad();
+ break;
+
+ default:
+ setVolume(false, false);
+ break;
+ }
+ break;
+
+ case KEY_CAMERA:
+ setShortcut();
+ break;
+
+ default:
+ break;
+ }
+}
+
+void BadaAppForm::OnKeyReleased(const Control &source, KeyCode keyCode) {
+}
diff --git a/backends/platform/bada/form.h b/backends/platform/bada/form.h
new file mode 100644
index 0000000000..3340e2216b
--- /dev/null
+++ b/backends/platform/bada/form.h
@@ -0,0 +1,108 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef BADA_FORM_H
+#define BADA_FORM_H
+
+#include <FApp.h>
+#include <FUi.h>
+#include <FSystem.h>
+#include <FBase.h>
+#include <FUiITouchEventListener.h>
+#include <FUiITextEventListener.h>
+
+#include "config.h"
+#include "common/scummsys.h"
+#include "common/events.h"
+#include "common/queue.h"
+#include "common/mutex.h"
+
+//
+// BadaAppForm
+//
+class BadaAppForm : public Osp::Ui::Controls::Form,
+ public Osp::Ui::IOrientationEventListener,
+ public Osp::Ui::ITouchEventListener,
+ public Osp::Ui::IKeyEventListener,
+ public Osp::Base::Runtime::IRunnable {
+public:
+ BadaAppForm();
+ ~BadaAppForm();
+
+ result Construct();
+ bool pollEvent(Common::Event &event);
+ bool isClosing() { return _state == kClosingState; }
+ void pushKey(Common::KeyCode keycode);
+ void exitSystem();
+
+private:
+ Object *Run();
+ result OnInitializing(void);
+ result OnDraw(void);
+ void OnOrientationChanged(const Osp::Ui::Control &source,
+ Osp::Ui::OrientationStatus orientationStatus);
+ void OnTouchDoublePressed(const Osp::Ui::Control &source,
+ const Osp::Graphics::Point &currentPosition,
+ const Osp::Ui::TouchEventInfo &touchInfo);
+ void OnTouchFocusIn(const Osp::Ui::Control &source,
+ const Osp::Graphics::Point &currentPosition,
+ const Osp::Ui::TouchEventInfo &touchInfo);
+ void OnTouchFocusOut(const Osp::Ui::Control &source,
+ const Osp::Graphics::Point &currentPosition,
+ const Osp::Ui::TouchEventInfo &touchInfo);
+ void OnTouchLongPressed(const Osp::Ui::Control &source,
+ const Osp::Graphics::Point &currentPosition,
+ const Osp::Ui::TouchEventInfo &touchInfo);
+ void OnTouchMoved(const Osp::Ui::Control &source,
+ const Osp::Graphics::Point &currentPosition,
+ const Osp::Ui::TouchEventInfo &touchInfo);
+ void OnTouchPressed(const Osp::Ui::Control &source,
+ const Osp::Graphics::Point &currentPosition,
+ const Osp::Ui::TouchEventInfo &touchInfo);
+ void OnTouchReleased(const Osp::Ui::Control &source,
+ const Osp::Graphics::Point &currentPosition,
+ const Osp::Ui::TouchEventInfo &touchInfo);
+ void OnKeyLongPressed(const Osp::Ui::Control &source,
+ Osp::Ui::KeyCode keyCode);
+ void OnKeyPressed(const Osp::Ui::Control &source,
+ Osp::Ui::KeyCode keyCode);
+ void OnKeyReleased(const Osp::Ui::Control &source,
+ Osp::Ui::KeyCode keyCode);
+
+ void pushEvent(Common::EventType type,
+ const Osp::Graphics::Point &currentPosition);
+ void terminate();
+ void setButtonShortcut();
+ void setShortcut();
+ void setVolume(bool up, bool minMax);
+ void showKeypad();
+
+ // event handling
+ Osp::Base::Runtime::Thread *_gameThread;
+ Osp::Base::Runtime::Mutex *_eventQueueLock;
+ Common::Queue<Common::Event> _eventQueue;
+ enum { kInitState, kActiveState, kClosingState, kDoneState, kErrorState } _state;
+ enum { kLeftButton, kRightButtonOnce, kRightButton, kMoveOnly } _buttonState;
+ enum { kControlMouse, kEscapeKey, kGameMenu, kShowKeypad, kSetVolume } _shortcut;
+};
+
+#endif
diff --git a/backends/platform/bada/fs.cpp b/backends/platform/bada/fs.cpp
new file mode 100644
index 0000000000..0ae0cde43d
--- /dev/null
+++ b/backends/platform/bada/fs.cpp
@@ -0,0 +1,435 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include "backends/platform/bada/system.h"
+#include "backends/platform/bada/fs.h"
+
+#define BUFFER_SIZE 1024
+
+// internal BADA paths
+#define PATH_ROOT "/"
+#define PATH_HOME "/Home"
+#define PATH_HOME_SHARE "/Home/Share"
+#define PATH_HOME_SHARE2 "/Home/Share2"
+#define PATH_HOME_X "/Home/"
+#define PATH_HOME_EXT "/HomeExt"
+#define PATH_MEDIA "/Media"
+#define PATH_CARD "/Storagecard"
+#define PATH_CARD_MEDIA "/Storagecard/Media"
+
+//
+// BadaFileStream
+//
+class BadaFileStream : public Common::SeekableReadStream,
+ public Common::WriteStream,
+ public Common::NonCopyable {
+public:
+ static BadaFileStream *makeFromPath(const String &path, bool writeMode);
+
+ BadaFileStream(File *file, bool writeMode);
+ ~BadaFileStream();
+
+ bool err() const;
+ void clearErr();
+ bool eos() const;
+
+ uint32 write(const void *dataPtr, uint32 dataSize);
+ bool flush();
+
+ int32 pos() const;
+ int32 size() const;
+ bool seek(int32 offs, int whence = SEEK_SET);
+ uint32 read(void *dataPtr, uint32 dataSize);
+
+private:
+ byte buffer[BUFFER_SIZE];
+ uint32 bufferIndex;
+ uint32 bufferLength;
+ bool writeMode;
+ File *file;
+};
+
+BadaFileStream::BadaFileStream(File *ioFile, bool writeMode) :
+ bufferIndex(0),
+ bufferLength(0),
+ writeMode(writeMode),
+ file(ioFile) {
+ AppAssert(ioFile != 0);
+}
+
+BadaFileStream::~BadaFileStream() {
+ if (file) {
+ if (writeMode) {
+ flush();
+ }
+ delete file;
+ }
+}
+
+bool BadaFileStream::err() const {
+ result r = GetLastResult();
+ return (r != E_SUCCESS && r != E_END_OF_FILE);
+}
+
+void BadaFileStream::clearErr() {
+ SetLastResult(E_SUCCESS);
+}
+
+bool BadaFileStream::eos() const {
+ return (bufferLength - bufferIndex == 0) && (GetLastResult() == E_END_OF_FILE);
+}
+
+int32 BadaFileStream::pos() const {
+ return file->Tell() - (bufferLength - bufferIndex);
+}
+
+int32 BadaFileStream::size() const {
+ int32 oldPos = file->Tell();
+ file->Seek(FILESEEKPOSITION_END, 0);
+
+ int32 length = file->Tell();
+ SetLastResult(file->Seek(FILESEEKPOSITION_BEGIN, oldPos));
+
+ return length;
+}
+
+bool BadaFileStream::seek(int32 offs, int whence) {
+ bool result = false;
+ switch (whence) {
+ case SEEK_SET:
+ // set from start of file
+ SetLastResult(file->Seek(FILESEEKPOSITION_BEGIN, offs));
+ result = (E_SUCCESS == GetLastResult());
+ break;
+
+ case SEEK_CUR:
+ // set relative to offs
+ if (bufferIndex < bufferLength && bufferIndex > (uint32)-offs) {
+ // re-position within the buffer
+ SetLastResult(E_SUCCESS);
+ bufferIndex += offs;
+ return true;
+ } else {
+ offs -= (bufferLength - bufferIndex);
+ if (offs < 0 && file->Tell() + offs < 0) {
+ // avoid negative positioning
+ offs = 0;
+ }
+ if (offs != 0) {
+ SetLastResult(file->Seek(FILESEEKPOSITION_CURRENT, offs));
+ result = (E_SUCCESS == GetLastResult());
+ } else {
+ result = true;
+ }
+ }
+ break;
+
+ case SEEK_END:
+ // set relative to end - positive will increase the file size
+ SetLastResult(file->Seek(FILESEEKPOSITION_END, offs));
+ result = (E_SUCCESS == GetLastResult());
+ break;
+
+ default:
+ AppLog("Invalid whence %d", whence);
+ return false;
+ }
+
+ if (!result) {
+ AppLog("seek failed");
+ }
+
+ bufferIndex = bufferLength = 0;
+ return result;
+}
+
+uint32 BadaFileStream::read(void *ptr, uint32 len) {
+ uint32 result = 0;
+ if (!eos()) {
+ if (bufferIndex < bufferLength) {
+ // use existing buffer
+ uint32 available = bufferLength - bufferIndex;
+ if (len <= available) {
+ // use allocation
+ memcpy((byte*)ptr, &buffer[bufferIndex], len);
+ bufferIndex += len;
+ result = len;
+ } else {
+ // use remaining allocation
+ memcpy((byte*)ptr, &buffer[bufferIndex], available);
+ uint32 remaining = len - available;
+ result = available;
+
+ if (remaining) {
+ result += file->Read(((byte*)ptr) + available, remaining);
+ }
+ bufferIndex = bufferLength = 0;
+ }
+ } else if (len < BUFFER_SIZE) {
+ // allocate and use buffer
+ bufferIndex = 0;
+ bufferLength = file->Read(buffer, BUFFER_SIZE);
+ if (bufferLength) {
+ if (bufferLength < len) {
+ len = bufferLength;
+ }
+ memcpy((byte*)ptr, buffer, len);
+ result = bufferIndex = len;
+ }
+ } else {
+ result = file->Read((byte*)ptr, len);
+ bufferIndex = bufferLength = 0;
+ }
+ } else {
+ AppLog("Attempted to read past EOS");
+ }
+ return result;
+}
+
+uint32 BadaFileStream::write(const void *ptr, uint32 len) {
+ result r = file->Write(ptr, len);
+ SetLastResult(r);
+ return (r == E_SUCCESS ? len : 0);
+}
+
+bool BadaFileStream::flush() {
+ logEntered();
+ SetLastResult(file->Flush());
+ return (E_SUCCESS == GetLastResult());
+}
+
+BadaFileStream *BadaFileStream::makeFromPath(const String &path, bool writeMode) {
+ File *ioFile = new File();
+
+ String filePath = path;
+ if (writeMode && (path[0] != '.' && path[0] != '/')) {
+ filePath.Insert(PATH_HOME_X, 0);
+ }
+
+ AppLog("Open file %S", filePath.GetPointer());
+
+ result r = ioFile->Construct(filePath, writeMode ? L"w" : L"r", writeMode);
+ if (r == E_SUCCESS) {
+ return new BadaFileStream(ioFile, writeMode);
+ }
+
+ AppLog("Failed to open file");
+ delete ioFile;
+ return 0;
+}
+
+//
+// converts a bada (wchar) String into a scummVM (char) string
+//
+Common::String fromString(const Osp::Base::String &in) {
+ ByteBuffer *buf = StringUtil::StringToUtf8N(in);
+ Common::String result((const char*)buf->GetPointer());
+ delete buf;
+
+ return result;
+}
+
+//
+// BadaFilesystemNode
+//
+BadaFilesystemNode::BadaFilesystemNode(const Common::String &nodePath) {
+ AppAssert(nodePath.size() > 0);
+ init(nodePath);
+}
+
+BadaFilesystemNode::BadaFilesystemNode(const Common::String &root,
+ const Common::String &nodePath) {
+ // Make sure the string contains no slashes
+ AppAssert(!nodePath.contains('/'));
+
+ // We assume here that path is already normalized (hence don't bother to
+ // call Common::normalizePath on the final path).
+ Common::String newPath(root);
+ if (root.lastChar() != '/') {
+ newPath += '/';
+ }
+ newPath += nodePath;
+
+ init(newPath);
+}
+
+void BadaFilesystemNode::init(const Common::String &nodePath) {
+ // Normalize the path (that is, remove unneeded slashes etc.)
+ _path = Common::normalizePath(nodePath, '/');
+ _displayName = Common::lastPathComponent(_path, '/');
+
+ StringUtil::Utf8ToString(_path.c_str(), _unicodePath);
+ _isVirtualDir = (_path == PATH_ROOT ||
+ _path == PATH_HOME ||
+ _path == PATH_HOME_SHARE ||
+ _path == PATH_HOME_SHARE2 ||
+ _path == PATH_CARD);
+ _isValid = _isVirtualDir || !IsFailed(File::GetAttributes(_unicodePath, _attr));
+}
+
+bool BadaFilesystemNode::exists() const {
+ return _isValid;
+}
+
+bool BadaFilesystemNode::isReadable() const {
+ return _isVirtualDir || _isValid;
+}
+
+bool BadaFilesystemNode::isDirectory() const {
+ return _isVirtualDir || (_isValid && _attr.IsDirectory());
+}
+
+bool BadaFilesystemNode::isWritable() const {
+ bool result = (_isValid && !_isVirtualDir && !_attr.IsDirectory() && !_attr.IsReadOnly());
+ if (_path == PATH_HOME ||
+ _path == PATH_HOME_EXT ||
+ _path == PATH_HOME_SHARE ||
+ _path == PATH_HOME_SHARE2) {
+ result = true;
+ }
+ return result;
+}
+
+AbstractFSNode *BadaFilesystemNode::getChild(const Common::String &n) const {
+ AppAssert(!_path.empty());
+ AppAssert(isDirectory());
+ return new BadaFilesystemNode(_path, n);
+}
+
+bool BadaFilesystemNode::getChildren(AbstractFSList &myList,
+ ListMode mode, bool hidden) const {
+ AppAssert(isDirectory());
+
+ bool result = false;
+
+ if (_isVirtualDir && mode != Common::FSNode::kListFilesOnly) {
+ // present well known BADA file system areas
+ if (_path == PATH_ROOT) {
+ myList.push_back(new BadaFilesystemNode(PATH_HOME));
+ myList.push_back(new BadaFilesystemNode(PATH_HOME_EXT));
+ myList.push_back(new BadaFilesystemNode(PATH_MEDIA));
+ myList.push_back(new BadaFilesystemNode(PATH_CARD));
+ result = true; // no more entries
+ } else if (_path == PATH_CARD) {
+ myList.push_back(new BadaFilesystemNode(PATH_CARD_MEDIA));
+ result = true; // no more entries
+ } else if (_path == PATH_HOME) {
+ // ensure share path is always included
+ myList.push_back(new BadaFilesystemNode(PATH_HOME_SHARE));
+ myList.push_back(new BadaFilesystemNode(PATH_HOME_SHARE2));
+ }
+ }
+
+ if (!result) {
+ DirEnumerator *pDirEnum = 0;
+ Directory *pDir = new Directory();
+
+ // open directory
+ if (IsFailed(pDir->Construct(_unicodePath))) {
+ AppLog("Failed to open directory: %S", _unicodePath.GetPointer());
+ } else {
+ // read all directory entries
+ pDirEnum = pDir->ReadN();
+ if (pDirEnum) {
+ result = true;
+ }
+
+ // loop through all directory entries
+ while (pDirEnum && pDirEnum->MoveNext() == E_SUCCESS) {
+ DirEntry dirEntry = pDirEnum->GetCurrentDirEntry();
+
+ // skip 'invisible' files if necessary
+ Osp::Base::String fileName = dirEntry.GetName();
+
+ if (fileName[0] == '.' && !hidden) {
+ continue;
+ }
+
+ // skip '.' and '..' to avoid cycles
+ if (fileName == L"." || fileName == L"..") {
+ continue;
+ }
+
+ // Honor the chosen mode
+ if ((mode == Common::FSNode::kListFilesOnly && dirEntry.IsDirectory()) ||
+ (mode == Common::FSNode::kListDirectoriesOnly && !dirEntry.IsDirectory())) {
+ continue;
+ }
+ myList.push_back(new BadaFilesystemNode(_path, fromString(fileName)));
+ }
+ }
+
+ // cleanup
+ if (pDirEnum) {
+ delete pDirEnum;
+ }
+
+ // close the opened directory
+ if (pDir) {
+ delete pDir;
+ }
+ }
+
+ return result;
+}
+
+AbstractFSNode *BadaFilesystemNode::getParent() const {
+ logEntered();
+ if (_path == PATH_ROOT) {
+ return 0; // The filesystem root has no parent
+ }
+
+ const char *start = _path.c_str();
+ const char *end = start + _path.size();
+
+ // Strip of the last component. We make use of the fact that at this
+ // point, path is guaranteed to be normalized
+ while (end > start && *(end-1) != '/') {
+ end--;
+ }
+
+ if (end == start) {
+ // This only happens if we were called with a relative path, for which
+ // there simply is no parent.
+ // TODO: We could also resolve this by assuming that the parent is the
+ // current working directory, and returning a node referring to that.
+ return 0;
+ }
+
+ return new BadaFilesystemNode(Common::String(start, end));
+}
+
+Common::SeekableReadStream *BadaFilesystemNode::createReadStream() {
+ Common::SeekableReadStream *result = BadaFileStream::makeFromPath(_unicodePath, false);
+ if (result != NULL) {
+ _isValid = !IsFailed(File::GetAttributes(_unicodePath, _attr));
+ }
+ return result;
+}
+
+Common::WriteStream *BadaFilesystemNode::createWriteStream() {
+ Common::WriteStream *result = BadaFileStream::makeFromPath(_unicodePath, true);
+ if (result != NULL) {
+ _isValid = !IsFailed(File::GetAttributes(_unicodePath, _attr));
+ }
+ return result;
+}
diff --git a/backends/platform/bada/fs.h b/backends/platform/bada/fs.h
new file mode 100644
index 0000000000..d7d368ac20
--- /dev/null
+++ b/backends/platform/bada/fs.h
@@ -0,0 +1,82 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef BADA_FILESYSTEM_H
+#define BADA_FILESYSTEM_H
+
+#include <FBaseString.h>
+#include <FBaseUtilStringUtil.h>
+#include <FIoDirectory.h>
+#include <FIoFile.h>
+
+#include "config.h"
+#include "common/scummsys.h"
+#include "common/stream.h"
+#include "backends/fs/abstract-fs.h"
+
+using namespace Osp::Io;
+using namespace Osp::Base;
+using namespace Osp::Base::Utility;
+
+/**
+ * Implementation of the ScummVM file system API based on BADA.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFSNode.
+ */
+class BadaFilesystemNode : public AbstractFSNode {
+public:
+ /**
+ * Creates a BadaFilesystemNode for a given path.
+ *
+ * @param path the path the new node should point to.
+ */
+ BadaFilesystemNode(const Common::String &path);
+
+ Common::String getDisplayName() const { return _displayName; }
+ Common::String getName() const { return _displayName; }
+ Common::String getPath() const { return _path; }
+
+ bool exists() const;
+ bool isDirectory() const;
+ bool isReadable() const;
+ bool isWritable() const;
+
+ AbstractFSNode *getChild(const Common::String &n) const;
+ bool getChildren(AbstractFSList &list, ListMode mode, bool hidden) const;
+ AbstractFSNode *getParent() const;
+
+ Common::SeekableReadStream *createReadStream();
+ Common::WriteStream *createWriteStream();
+
+protected:
+ BadaFilesystemNode(const Common::String &root,
+ const Common::String &p);
+ void init(const Common::String &nodePath);
+
+ Common::String _displayName;
+ Common::String _path;
+ String _unicodePath;
+ bool _isValid;
+ bool _isVirtualDir;
+ FileAttributes _attr;
+};
+
+#endif
diff --git a/backends/platform/bada/graphics.cpp b/backends/platform/bada/graphics.cpp
new file mode 100644
index 0000000000..bd65c597c6
--- /dev/null
+++ b/backends/platform/bada/graphics.cpp
@@ -0,0 +1,261 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "graphics/fontman.h"
+
+#include "backends/platform/bada/form.h"
+#include "backends/platform/bada/system.h"
+#include "backends/platform/bada/graphics.h"
+
+//
+// BadaGraphicsManager
+//
+BadaGraphicsManager::BadaGraphicsManager(BadaAppForm *appForm) :
+ _appForm(appForm),
+ _eglDisplay(EGL_DEFAULT_DISPLAY),
+ _eglSurface(EGL_NO_SURFACE),
+ _eglConfig(0),
+ _eglContext(EGL_NO_CONTEXT),
+ _initState(true) {
+ assert(appForm != NULL);
+ _videoMode.fullscreen = true;
+}
+
+const Graphics::Font *BadaGraphicsManager::getFontOSD() {
+ return FontMan.getFontByUsage(Graphics::FontManager::kBigGUIFont);
+}
+
+bool BadaGraphicsManager::moveMouse(int16 &x, int16 &y) {
+ int16 currentX = _cursorState.x;
+ int16 currentY = _cursorState.y;
+
+ // save the current hardware coordinates
+ _cursorState.x = x;
+ _cursorState.y = y;
+
+ // return x/y as game coordinates
+ adjustMousePosition(x, y);
+
+ // convert current x/y to game coordinates
+ adjustMousePosition(currentX, currentY);
+
+ // return whether game coordinates have changed
+ return (currentX != x || currentY != y);
+}
+
+Common::List<Graphics::PixelFormat> BadaGraphicsManager::getSupportedFormats() const {
+ logEntered();
+
+ Common::List<Graphics::PixelFormat> res;
+ res.push_back(Graphics::PixelFormat(2, 4, 4, 4, 4, 12, 8, 4, 0));
+ res.push_back(Graphics::PixelFormat(2, 5, 6, 5, 0, 11, 5, 0, 0));
+ res.push_back(Graphics::PixelFormat(2, 5, 5, 5, 1, 11, 6, 1, 0));
+ res.push_back(Graphics::PixelFormat::createFormatCLUT8());
+ return res;
+}
+
+bool BadaGraphicsManager::hasFeature(OSystem::Feature f) {
+ bool result = (f == OSystem::kFeatureFullscreenMode ||
+ f == OSystem::kFeatureVirtualKeyboard ||
+ OpenGLGraphicsManager::hasFeature(f));
+ return result;
+}
+
+void BadaGraphicsManager::setFeatureState(OSystem::Feature f, bool enable) {
+ OpenGLGraphicsManager::setFeatureState(f, enable);
+}
+
+void BadaGraphicsManager::setReady() {
+ _initState = false;
+}
+
+void BadaGraphicsManager::updateScreen() {
+ if (_transactionMode == kTransactionNone) {
+ internUpdateScreen();
+ }
+}
+
+bool BadaGraphicsManager::loadEgl() {
+ logEntered();
+
+ EGLint numConfigs = 1;
+ EGLint eglConfigList[] = {
+ EGL_RED_SIZE, 5,
+ EGL_GREEN_SIZE, 6,
+ EGL_BLUE_SIZE, 5,
+ EGL_ALPHA_SIZE, 0,
+ EGL_DEPTH_SIZE, 8,
+ EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
+ EGL_RENDERABLE_TYPE, EGL_OPENGL_ES_BIT,
+ EGL_NONE
+ };
+
+ EGLint eglContextList[] = {
+ EGL_CONTEXT_CLIENT_VERSION, 1,
+ EGL_NONE
+ };
+
+ eglBindAPI(EGL_OPENGL_ES_API);
+
+ if (_eglDisplay) {
+ unloadGFXMode();
+ }
+
+ _eglDisplay = eglGetDisplay((EGLNativeDisplayType) EGL_DEFAULT_DISPLAY);
+ if (EGL_NO_DISPLAY == _eglDisplay) {
+ systemError("eglGetDisplay() failed");
+ return false;
+ }
+
+ if (EGL_FALSE == eglInitialize(_eglDisplay, NULL, NULL) ||
+ EGL_SUCCESS != eglGetError()) {
+ systemError("eglInitialize() failed");
+ return false;
+ }
+
+ if (EGL_FALSE == eglChooseConfig(_eglDisplay, eglConfigList,
+ &_eglConfig, 1, &numConfigs) ||
+ EGL_SUCCESS != eglGetError()) {
+ systemError("eglChooseConfig() failed");
+ return false;
+ }
+
+ if (!numConfigs) {
+ systemError("eglChooseConfig() failed. Matching config does not exist \n");
+ return false;
+ }
+
+ _eglSurface = eglCreateWindowSurface(_eglDisplay, _eglConfig,
+ (EGLNativeWindowType)_appForm, NULL);
+ if (EGL_NO_SURFACE == _eglSurface || EGL_SUCCESS != eglGetError()) {
+ systemError("eglCreateWindowSurface() failed. EGL_NO_SURFACE");
+ return false;
+ }
+
+ _eglContext = eglCreateContext(_eglDisplay, _eglConfig,
+ EGL_NO_CONTEXT, eglContextList);
+ if (EGL_NO_CONTEXT == _eglContext ||
+ EGL_SUCCESS != eglGetError()) {
+ systemError("eglCreateContext() failed");
+ return false;
+ }
+
+ if (false == eglMakeCurrent(_eglDisplay, _eglSurface, _eglSurface, _eglContext) ||
+ EGL_SUCCESS != eglGetError()) {
+ systemError("eglMakeCurrent() failed");
+ return false;
+ }
+
+ logLeaving();
+ return true;
+}
+
+bool BadaGraphicsManager::loadGFXMode() {
+ logEntered();
+
+ if (!loadEgl()) {
+ unloadGFXMode();
+ return false;
+ }
+
+ int x, y, width, height;
+ _appForm->GetBounds(x, y, width, height);
+ _videoMode.overlayWidth = _videoMode.hardwareWidth = width;
+ _videoMode.overlayHeight = _videoMode.hardwareHeight = height;
+ _videoMode.scaleFactor = 3; // for proportional sized cursor in the launcher
+
+ AppLog("screen size: %dx%d", _videoMode.hardwareWidth, _videoMode.hardwareHeight);
+ return OpenGLGraphicsManager::loadGFXMode();
+}
+
+void BadaGraphicsManager::loadTextures() {
+ logEntered();
+
+ OpenGLGraphicsManager::loadTextures();
+
+ // prevent image skew in some games, see:
+ // http://www.opengl.org/resources/features/KilgardTechniques/oglpitfall
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+}
+
+void BadaGraphicsManager::internUpdateScreen() {
+ if (!_initState) {
+ OpenGLGraphicsManager::internUpdateScreen();
+ eglSwapBuffers(_eglDisplay, _eglSurface);
+ } else {
+ showSplash();
+ }
+}
+
+void BadaGraphicsManager::unloadGFXMode() {
+ logEntered();
+
+ if (EGL_NO_DISPLAY != _eglDisplay) {
+ eglMakeCurrent(_eglDisplay, NULL, NULL, NULL);
+
+ if (_eglContext != EGL_NO_CONTEXT) {
+ eglDestroyContext(_eglDisplay, _eglContext);
+ _eglContext = EGL_NO_CONTEXT;
+ }
+
+ if (_eglSurface != EGL_NO_SURFACE) {
+ eglDestroySurface(_eglDisplay, _eglSurface);
+ _eglSurface = EGL_NO_SURFACE;
+ }
+
+ eglTerminate(_eglDisplay);
+ _eglDisplay = EGL_NO_DISPLAY;
+ }
+
+ _eglConfig = NULL;
+
+ OpenGLGraphicsManager::unloadGFXMode();
+ logLeaving();
+}
+
+// display a simple splash screen until launcher is ready
+void BadaGraphicsManager::showSplash() {
+ Canvas canvas;
+ canvas.Construct();
+ canvas.SetBackgroundColor(Color::COLOR_BLACK);
+ canvas.Clear();
+
+ int x = _videoMode.hardwareWidth / 3;
+ int y = _videoMode.hardwareHeight / 3;
+
+ Font *pFont = new Font();
+ pFont->Construct(FONT_STYLE_ITALIC | FONT_STYLE_BOLD, 55);
+ canvas.SetFont(*pFont);
+ canvas.SetForegroundColor(Color::COLOR_GREEN);
+ canvas.DrawText(Point(x, y), L"ScummVM");
+ delete pFont;
+
+ pFont = new Font();
+ pFont->Construct(FONT_STYLE_ITALIC | FONT_STYLE_BOLD, 35);
+ canvas.SetFont(*pFont);
+ canvas.SetForegroundColor(Color::COLOR_WHITE);
+ canvas.DrawText(Point(x + 70, y + 50), L"Loading ...");
+ delete pFont;
+
+ canvas.Show();
+
+}
diff --git a/backends/platform/bada/graphics.h b/backends/platform/bada/graphics.h
new file mode 100644
index 0000000000..b2aaca43bc
--- /dev/null
+++ b/backends/platform/bada/graphics.h
@@ -0,0 +1,72 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef BADA_GRAPHICS_H
+#define BADA_GRAPHICS_H
+
+#include <FBase.h>
+#include <FGraphics.h>
+#include <FApp.h>
+#include <FGraphicsOpengl.h>
+#include <FSystem.h>
+#include <FUi.h>
+
+#include "config.h"
+#include "backends/graphics/opengl/opengl-graphics.h"
+#include "graphics/font.h"
+#include "backends/platform/bada/form.h"
+
+using namespace Osp::Graphics;
+using namespace Osp::Graphics::Opengl;
+using namespace Osp::App;
+
+class BadaGraphicsManager : public OpenGLGraphicsManager {
+public:
+ BadaGraphicsManager(BadaAppForm *appForm);
+
+ Common::List<Graphics::PixelFormat> getSupportedFormats() const;
+ bool hasFeature(OSystem::Feature f);
+ void updateScreen();
+ void setFeatureState(OSystem::Feature f, bool enable);
+ void setReady();
+ bool isReady() { return !_initState; }
+ const Graphics::Font *getFontOSD();
+ bool moveMouse(int16 &x, int16 &y);
+
+private:
+ void internUpdateScreen();
+ bool loadGFXMode();
+ void loadTextures();
+ void unloadGFXMode();
+ void setInternalMousePosition(int x, int y) {}
+ void showSplash();
+
+ bool loadEgl();
+ BadaAppForm *_appForm;
+ EGLDisplay _eglDisplay;
+ EGLSurface _eglSurface;
+ EGLConfig _eglConfig;
+ EGLContext _eglContext;
+ bool _initState;
+};
+
+#endif
diff --git a/backends/platform/bada/main.cpp b/backends/platform/bada/main.cpp
new file mode 100644
index 0000000000..8c40f24dd1
--- /dev/null
+++ b/backends/platform/bada/main.cpp
@@ -0,0 +1,67 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include <FBase.h>
+#include <FApp.h>
+#include <FSystem.h>
+
+#include "backends/platform/bada/portdefs.h"
+#include "backends/platform/bada/form.h"
+#include "backends/platform/bada/system.h"
+#include "backends/platform/bada/application.h"
+
+using namespace Osp::Base;
+using namespace Osp::Base::Collection;
+
+C_LINKAGE_BEGIN
+
+_EXPORT_ int OspMain(int argc, char *pArgv[]);
+
+/**
+ * The entry function of bada application called by the operating system.
+ */
+int OspMain(int argc, char *pArgv[]) {
+ result r = E_SUCCESS;
+
+ AppLog("Application started.");
+ ArrayList *pArgs = new ArrayList();
+ pArgs->Construct();
+
+ for (int i = 0; i < argc; i++) {
+ pArgs->Add(*(new String(pArgv[i])));
+ }
+
+ r = Osp::App::Application::Execute(BadaScummVM::createInstance, pArgs);
+ if (IsFailed(r)) {
+ r &= 0x0000FFFF;
+ }
+
+ pArgs->RemoveAll(true);
+ delete pArgs;
+ AppLog("Application finished.");
+
+ return static_cast<int>(r);
+}
+
+C_LINKAGE_END
+
+
diff --git a/backends/platform/bada/missing.cpp b/backends/platform/bada/missing.cpp
new file mode 100644
index 0000000000..a5433ec61a
--- /dev/null
+++ b/backends/platform/bada/missing.cpp
@@ -0,0 +1,113 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include <FApp.h>
+#include <FGraphics.h>
+#include <FUi.h>
+#include <FSystem.h>
+#include <FBase.h>
+
+#include "backends/platform/bada/portdefs.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#include <ctype.h>
+
+#define BUF_SIZE 255
+
+void systemError(const char *message);
+
+C_LINKAGE_BEGIN
+
+int __errno; // for overridden method in saves/default/default-saves.cpp
+
+void __assert_func(const char *file, int line,
+ const char *func, const char *err) {
+ char buffer[BUF_SIZE];
+ snprintf(buffer, sizeof(buffer), "%s %d %s %s", file, line, func, err);
+ systemError(buffer);
+}
+
+void stderr_fprintf(void*, const char *format, ...) {
+ va_list ap;
+ char buffer[BUF_SIZE];
+
+ va_start(ap, format);
+ vsnprintf(buffer, sizeof(buffer), format, ap);
+ va_end(ap);
+
+ AppLog(buffer);
+}
+
+void stderr_vfprintf(void*, const char *format, va_list ap) {
+ char buffer[BUF_SIZE];
+ vsnprintf(buffer, sizeof(buffer), format, ap);
+ AppLog(buffer);
+}
+
+int printf(const char *format, ...) {
+ int result = 0;
+ va_list ap;
+ char buffer[BUF_SIZE];
+
+ va_start(ap, format);
+ result = vsnprintf(buffer, sizeof(buffer), format, ap);
+ va_end(ap);
+
+ AppLog(buffer);
+
+ return result;
+}
+
+int sprintf(char *str, const char *format, ...) {
+ va_list ap;
+ int result;
+ char buffer[BUF_SIZE];
+
+ va_start(ap, format);
+ result = vsnprintf(buffer, sizeof(buffer), format, ap);
+ va_end(ap);
+
+ strcpy(str, buffer);
+
+ return result;
+}
+
+char *strdup(const char *strSource) {
+ char *buffer;
+ int len = strlen(strSource) + 1;
+ buffer = (char*)malloc(len);
+ if (buffer) {
+ memcpy(buffer, strSource, len);
+ }
+ return buffer;
+}
+
+int vsprintf(char *str, const char *format, va_list ap) {
+ char buffer[BUF_SIZE];
+ int result = vsnprintf(buffer, sizeof(buffer), format, ap);
+ strcpy(str, buffer);
+ return result;
+}
+
+C_LINKAGE_END
diff --git a/backends/platform/bada/portdefs.h b/backends/platform/bada/portdefs.h
new file mode 100644
index 0000000000..e85d578678
--- /dev/null
+++ b/backends/platform/bada/portdefs.h
@@ -0,0 +1,84 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef PORT_DEFS_H
+#define PORT_DEFS_H
+
+#include <assert.h>
+#include <stdarg.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <math.h>
+
+#define M_PI 3.14159265358979323846
+
+#ifdef __cplusplus
+ #include <ctype.h> // causes a link error when building c programs
+ #define C_LINKAGE_BEGIN extern "C" {
+ #define C_LINKAGE_END }
+#else
+ #define C_LINKAGE_BEGIN
+ #define C_LINKAGE_END
+#endif
+
+C_LINKAGE_BEGIN
+
+// for libFLAC
+#undef fseeko
+#undef ftello
+#define fseeko fseek
+#define ftello ftell
+
+// overcome use of fprintf since bada/newlib (1.2) does not
+// support stderr/stdout (undefined reference to `_impure_ptr').
+
+void stderr_fprintf(void*, const char *format, ...);
+void stderr_vfprintf(void*, const char *format, va_list ap);
+
+#undef fprintf
+#undef vfprintf
+#undef stderr
+#undef stdout
+#undef stdin
+#undef fputs
+#undef fflush
+
+#define stderr (void*)0
+#define stdout (void*)1
+#define stdin (void*)2
+#define fputs(str, file)
+#define fflush(file)
+#define sscanf simple_sscanf
+#define fprintf stderr_fprintf
+#define vfprintf stderr_vfprintf
+
+int printf(const char *format, ...);
+int sprintf(char *str, const char *format, ...);
+int simple_sscanf(const char *buffer, const char *format, ...);
+char *strdup(const char *s1);
+int vsprintf(char *str, const char *format, va_list ap);
+
+C_LINKAGE_END
+
+#endif
diff --git a/backends/platform/bada/sscanf.cpp b/backends/platform/bada/sscanf.cpp
new file mode 100644
index 0000000000..b5e5b88cb5
--- /dev/null
+++ b/backends/platform/bada/sscanf.cpp
@@ -0,0 +1,213 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <string.h>
+#include <ctype.h>
+
+//
+// simple sscanf replacement to match scummvm usage patterns
+//
+
+bool scanInt(const char **in, va_list *ap, int max) {
+ // skip leading space characters
+ while (**in && **in == ' ') {
+ (*in)++;
+ }
+
+ // number optionally preceeded with a + or - sign.
+ bool negate = false;
+ if (**in == '-') {
+ (*in)++;
+ negate = true;
+ }
+
+ if (**in == '+') {
+ (*in)++;
+ }
+
+ int *arg = va_arg(*ap, int*);
+ char *end;
+ long n = strtol(*in, &end, 10);
+ if (negate) {
+ n = -n;
+ }
+
+ bool err = false;
+ if (end == *in || (max > 0 && (end - *in) > max)) {
+ err = true;
+ } else {
+ *arg = (int)n;
+ *in = end;
+ }
+ return err;
+}
+
+bool scanHex(const char **in, va_list *ap) {
+ unsigned *arg = va_arg(*ap, unsigned*);
+ char *end;
+ long n = strtol(*in, &end, 16);
+ if (end == *in) {
+ return true;
+ }
+
+ *in = end;
+ *arg = (unsigned) n;
+ return false;
+}
+
+bool scanString(const char **in, va_list *ap) {
+ char *arg = va_arg(*ap, char*);
+ while (**in && **in != ' ' && **in != '\n' && **in != '\t') {
+ *arg = **in;
+ arg++;
+ (*in)++;
+ }
+ *arg = '\0';
+ (*in)++;
+ return false;
+}
+
+bool scanStringUntil(const char **in, va_list *ap, char c_end) {
+ char *arg = va_arg(*ap, char*);
+ while (**in && **in != c_end) {
+ *arg = **in;
+ *arg++;
+ (*in)++;
+ }
+ *arg = 0;
+ (*in)++;
+ return false;
+}
+
+bool scanChar(const char **in, va_list *ap) {
+ char *arg = va_arg(*ap, char*);
+ if (**in) {
+ *arg = **in;
+ (*in)++;
+ }
+ return false;
+}
+
+extern "C" int simple_sscanf(const char *input, const char *format, ...) {
+ va_list ap;
+ int result = 0;
+ const char *next = input;
+
+ va_start(ap, format);
+
+ while (*format) {
+ if (*format == '%') {
+ format++;
+ int max = 0;
+ while (isdigit(*format)) {
+ max = (max * 10) + (*format - '0');
+ format++;
+ }
+
+ bool err = false;
+ switch (*format++) {
+ case 'c':
+ err = scanChar(&next, &ap);
+ break;
+ case 'd':
+ case 'u':
+ err = scanInt(&next, &ap, max);
+ break;
+ case 'x':
+ err = scanHex(&next, &ap);
+ break;
+ case 's':
+ err = scanString(&next, &ap);
+ break;
+ case '[':
+ // assume %[^c]
+ if ('^' != *format) {
+ err = true;
+ } else {
+ format++;
+ if (*format && *(format+1) == ']') {
+ err = scanStringUntil(&next, &ap, *format);
+ format += 2;
+ } else {
+ err = true;
+ }
+ }
+ break;
+ default:
+ err = true;
+ break;
+ }
+
+ if (err) {
+ break;
+ } else {
+ result++;
+ }
+ } else if (*format++ != *next++) {
+ // match input
+ break;
+ }
+ }
+
+ va_end(ap);
+ return result;
+}
+
+#if defined(TEST)
+int main(int argc, char *pArgv[]) {
+ int x,y,xx,yy,h;
+ char buffer[100];
+ unsigned u;
+ char c;
+ strcpy(buffer, "hello");
+ char *b = buffer;
+
+ if (simple_sscanf("BBX 00009 -1 +10 000",
+ "BBX %d %d %d %d",
+ &x, &y, &xx, &yy) != 4) {
+ printf("Failed\n");
+ } else {
+ printf("Success %d %d %d %d\n", x, y, xx, yy);
+ }
+
+ if (simple_sscanf("CAT 123x-10 0x100h 123456.AUD $ ",
+ "CAT %dx%d %xh %06u.AUD %c",
+ &x, &y, &h, &u, &c) != 5) {
+ printf("Failed\n");
+ } else {
+ printf("Success %d %d %d %d '%c' \n", x, y, h, u, c);
+ }
+
+ if (simple_sscanf("COPYRIGHT \"Copyright (c) 1984, 1987 Foo Systems Incorporated",
+ "COPYRIGHT \"%[^\"]",
+ b) != 1) {
+ printf("Failed\n");
+ } else {
+ printf("Success %s\n", buffer);
+ }
+
+ return 0;
+}
+#endif
diff --git a/backends/platform/bada/system.cpp b/backends/platform/bada/system.cpp
new file mode 100644
index 0000000000..d284688068
--- /dev/null
+++ b/backends/platform/bada/system.cpp
@@ -0,0 +1,506 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include <FUiCtrlMessageBox.h>
+
+#include "common/config-manager.h"
+#include "common/file.h"
+#include "engines/engine.h"
+#include "graphics/font.h"
+#include "graphics/fontman.h"
+#include "graphics/fonts/bdf.h"
+#include "backends/saves/default/default-saves.h"
+#include "backends/events/default/default-events.h"
+#include "backends/audiocd/default/default-audiocd.h"
+#include "backends/mutex/mutex.h"
+#include "backends/fs/fs-factory.h"
+#include "backends/timer/bada/timer.h"
+
+#include "backends/platform/bada/form.h"
+#include "backends/platform/bada/system.h"
+#include "backends/platform/bada/graphics.h"
+#include "backends/platform/bada/audio.h"
+
+using namespace Osp::Base;
+using namespace Osp::Base::Runtime;
+using namespace Osp::Ui::Controls;
+
+#define DEFAULT_CONFIG_FILE "/Home/scummvm.ini"
+#define RESOURCE_PATH "/Res"
+#define MUTEX_BUFFER_SIZE 5
+
+//
+// BadaFilesystemFactory
+//
+class BadaFilesystemFactory : public FilesystemFactory {
+ AbstractFSNode *makeRootFileNode() const;
+ AbstractFSNode *makeCurrentDirectoryFileNode() const;
+ AbstractFSNode *makeFileNodePath(const Common::String &path) const;
+};
+
+AbstractFSNode *BadaFilesystemFactory::makeRootFileNode() const {
+ return new BadaFilesystemNode("/");
+}
+
+AbstractFSNode *BadaFilesystemFactory::makeCurrentDirectoryFileNode() const {
+ return new BadaFilesystemNode("/Home");
+}
+
+AbstractFSNode *BadaFilesystemFactory::makeFileNodePath(const Common::String &path) const {
+ AppAssert(!path.empty());
+ return new BadaFilesystemNode(path);
+}
+
+//
+// BadaSaveFileManager
+//
+struct BadaSaveFileManager : public DefaultSaveFileManager {
+ bool removeSavefile(const Common::String &filename);
+};
+
+bool BadaSaveFileManager::removeSavefile(const Common::String &filename) {
+ Common::String savePathName = getSavePath();
+
+ checkPath(Common::FSNode(savePathName));
+ if (getError().getCode() != Common::kNoError) {
+ return false;
+ }
+
+ // recreate FSNode since checkPath may have changed/created the directory
+ Common::FSNode savePath(savePathName);
+ Common::FSNode file = savePath.getChild(filename);
+
+ String unicodeFileName;
+ StringUtil::Utf8ToString(file.getPath().c_str(), unicodeFileName);
+
+ switch (Osp::Io::File::Remove(unicodeFileName)) {
+ case E_SUCCESS:
+ return true;
+
+ case E_ILLEGAL_ACCESS:
+ setError(Common::kWritePermissionDenied, "Search or write permission denied: " +
+ file.getName());
+ break;
+
+ default:
+ setError(Common::kPathDoesNotExist, "removeSavefile: '" + file.getName() +
+ "' does not exist or path is invalid");
+ break;
+ }
+
+ return false;
+}
+
+//
+// BadaMutexManager
+//
+struct BadaMutexManager : public MutexManager {
+ BadaMutexManager();
+ ~BadaMutexManager();
+ OSystem::MutexRef createMutex();
+ void lockMutex(OSystem::MutexRef mutex);
+ void unlockMutex(OSystem::MutexRef mutex);
+ void deleteMutex(OSystem::MutexRef mutex);
+private:
+ Mutex *buffer[MUTEX_BUFFER_SIZE];
+};
+
+BadaMutexManager::BadaMutexManager() {
+ for (int i = 0; i < MUTEX_BUFFER_SIZE; i++) {
+ buffer[i] = NULL;
+ }
+}
+
+BadaMutexManager::~BadaMutexManager() {
+ for (int i = 0; i < MUTEX_BUFFER_SIZE; i++) {
+ if (buffer[i] != NULL) {
+ delete buffer[i];
+ }
+ }
+}
+
+OSystem::MutexRef BadaMutexManager::createMutex() {
+ Mutex *mutex = new Mutex();
+ mutex->Create();
+
+ for (int i = 0; i < MUTEX_BUFFER_SIZE; i++) {
+ if (buffer[i] == NULL) {
+ buffer[i] = mutex;
+ break;
+ }
+ }
+
+ return (OSystem::MutexRef) mutex;
+}
+
+void BadaMutexManager::lockMutex(OSystem::MutexRef mutex) {
+ Mutex *m = (Mutex *)mutex;
+ m->Acquire();
+}
+
+void BadaMutexManager::unlockMutex(OSystem::MutexRef mutex) {
+ Mutex *m = (Mutex *)mutex;
+ m->Release();
+}
+
+void BadaMutexManager::deleteMutex(OSystem::MutexRef mutex) {
+ Mutex *m = (Mutex *)mutex;
+
+ for (int i = 0; i < MUTEX_BUFFER_SIZE; i++) {
+ if (buffer[i] == m) {
+ buffer[i] = NULL;
+ }
+ }
+
+ delete m;
+}
+
+//
+// BadaEventManager
+//
+struct BadaEventManager : public DefaultEventManager {
+ BadaEventManager(Common::EventSource *boss);
+ void init();
+ int shouldQuit() const;
+};
+
+BadaEventManager::BadaEventManager(Common::EventSource *boss) :
+ DefaultEventManager(boss) {
+}
+
+void BadaEventManager::init() {
+ DefaultEventManager::init();
+
+ // theme and vkbd should have now loaded - clear the splash screen
+ BadaSystem *system = (BadaSystem *)g_system;
+ BadaGraphicsManager *graphics = system->getGraphics();
+ if (graphics) {
+ graphics->setReady();
+ graphics->updateScreen();
+ }
+}
+
+int BadaEventManager::shouldQuit() const {
+ BadaSystem *system = (BadaSystem *)g_system;
+ return DefaultEventManager::shouldQuit() || system->isClosing();
+}
+
+//
+// BadaSystem
+//
+BadaSystem::BadaSystem(BadaAppForm *appForm) :
+ _appForm(appForm),
+ _audioThread(0),
+ _epoch(0) {
+}
+
+result BadaSystem::Construct(void) {
+ logEntered();
+
+ _fsFactory = new BadaFilesystemFactory();
+ if (!_fsFactory) {
+ return E_OUT_OF_MEMORY;
+ }
+
+ return E_SUCCESS;
+}
+
+BadaSystem::~BadaSystem() {
+ logEntered();
+}
+
+result BadaSystem::initModules() {
+ logEntered();
+
+ _mutexManager = new BadaMutexManager();
+ if (!_mutexManager) {
+ return E_OUT_OF_MEMORY;
+ }
+
+ _timerManager = new BadaTimerManager();
+ if (!_timerManager) {
+ return E_OUT_OF_MEMORY;
+ }
+
+ _savefileManager = new BadaSaveFileManager();
+ if (!_savefileManager) {
+ return E_OUT_OF_MEMORY;
+ }
+
+ _graphicsManager = (GraphicsManager *)new BadaGraphicsManager(_appForm);
+ if (!_graphicsManager) {
+ return E_OUT_OF_MEMORY;
+ }
+
+ // depends on _graphicsManager when ENABLE_VKEYBD enabled
+ _eventManager = new BadaEventManager(this);
+ if (!_eventManager) {
+ return E_OUT_OF_MEMORY;
+ }
+
+ _audioThread = new AudioThread();
+ if (!_audioThread) {
+ return E_OUT_OF_MEMORY;
+ }
+
+ _mixer = _audioThread->Construct(this);
+ if (!_mixer) {
+ return E_OUT_OF_MEMORY;
+ }
+
+ _audiocdManager = (AudioCDManager *)new DefaultAudioCDManager();
+ if (!_audiocdManager) {
+ return E_OUT_OF_MEMORY;
+ }
+
+ if (IsFailed(_audioThread->Start())) {
+ AppLog("Failed to start audio thread");
+ return E_OUT_OF_MEMORY;
+ }
+
+ logLeaving();
+ return E_SUCCESS;
+}
+
+void BadaSystem::initBackend() {
+ logEntered();
+
+ // use the mobile device theme
+ ConfMan.set("gui_theme", "/Res/scummmobile");
+
+ // allow bada virtual keypad pack to be found
+ ConfMan.set("vkeybdpath", "/Res/vkeybd_bada");
+ ConfMan.set("vkeybd_pack_name", "vkeybd_bada");
+
+ // set default save path to writable area
+ if (!ConfMan.hasKey("savepath")) {
+ ConfMan.set("savepath", "/Home/Share");
+ }
+
+ // default to no auto-save
+ if (!ConfMan.hasKey("autosave_period")) {
+ ConfMan.setInt("autosave_period", 0);
+ }
+
+ ConfMan.registerDefault("fullscreen", true);
+ ConfMan.registerDefault("aspect_ratio", false);
+ ConfMan.setBool("confirm_exit", false);
+
+ Osp::System::SystemTime::GetTicks(_epoch);
+
+ if (E_SUCCESS != initModules()) {
+ AppLog("initModules failed");
+ } else {
+ OSystem::initBackend();
+ }
+
+ // replace kBigGUIFont using the large font from the scummmobile theme
+ Common::File fontFile;
+ Common::String fileName = "/Res/scummmobile/helvB14-iso-8859-1.fcc";
+ BadaFilesystemNode file(fileName);
+ if (file.exists()) {
+ Common::SeekableReadStream *stream = file.createReadStream();
+ if (stream) {
+ if (fontFile.open(stream, fileName)) {
+ Graphics::BdfFont *font = Graphics::BdfFont::loadFromCache(fontFile);
+ if (font) {
+ // use this font for the vkbd and on-screen messages
+ FontMan.setFont(Graphics::FontManager::kBigGUIFont, font);
+ }
+ }
+ }
+ }
+
+ logLeaving();
+}
+
+void BadaSystem::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) {
+ // allow translations.dat and game .DAT files to be found
+ s.addDirectory(RESOURCE_PATH, RESOURCE_PATH, priority);
+}
+
+void BadaSystem::destroyBackend() {
+ closeAudio();
+
+ delete _graphicsManager;
+ _graphicsManager = 0;
+
+ delete _savefileManager;
+ _savefileManager = 0;
+
+ delete _fsFactory;
+ _fsFactory = 0;
+
+ delete _mixer;
+ _mixer = 0;
+
+ delete _audiocdManager;
+ _audiocdManager = 0;
+
+ delete _timerManager;
+ _timerManager = 0;
+
+ delete _eventManager;
+ _eventManager = 0;
+
+ delete _mutexManager;
+ _mutexManager = 0;
+}
+
+bool BadaSystem::pollEvent(Common::Event &event) {
+ return _appForm->pollEvent(event);
+}
+
+uint32 BadaSystem::getMillis() {
+ long long result, ticks = 0;
+ Osp::System::SystemTime::GetTicks(ticks);
+ result = ticks - _epoch;
+ return result;
+}
+
+void BadaSystem::delayMillis(uint msecs) {
+ if (!_appForm->isClosing()) {
+ Thread::Sleep(msecs);
+ }
+}
+
+void BadaSystem::updateScreen() {
+ if (_graphicsManager != NULL) {
+ _graphicsManager->updateScreen();
+ }
+}
+
+void BadaSystem::getTimeAndDate(TimeDate &td) const {
+ DateTime currentTime;
+
+ if (E_SUCCESS == Osp::System::SystemTime::GetCurrentTime(currentTime)) {
+ td.tm_sec = currentTime.GetSecond();
+ td.tm_min = currentTime.GetMinute();
+ td.tm_hour = currentTime.GetHour();
+ td.tm_mday = currentTime.GetDay();
+ td.tm_mon = currentTime.GetMonth();
+ td.tm_year = currentTime.GetYear();
+ }
+}
+
+void BadaSystem::fatalError() {
+ systemError("ScummVM: Fatal internal error.");
+}
+
+void BadaSystem::exitSystem() {
+ if (_appForm) {
+ closeAudio();
+ closeGraphics();
+ _appForm->exitSystem();
+ }
+}
+
+void BadaSystem::logMessage(LogMessageType::Type type, const char *message) {
+ if (type == LogMessageType::kError) {
+ systemError(message);
+ } else {
+ AppLog(message);
+ }
+}
+
+Common::SeekableReadStream *BadaSystem::createConfigReadStream() {
+ BadaFilesystemNode file(DEFAULT_CONFIG_FILE);
+ return file.createReadStream();
+}
+
+Common::WriteStream *BadaSystem::createConfigWriteStream() {
+ BadaFilesystemNode file(DEFAULT_CONFIG_FILE);
+ return file.createWriteStream();
+}
+
+void BadaSystem::closeAudio() {
+ if (_audioThread) {
+ _audioThread->Stop();
+ _audioThread->Join();
+ delete _audioThread;
+ _audioThread = 0;
+ }
+}
+
+void BadaSystem::closeGraphics() {
+ if (_graphicsManager) {
+ delete _graphicsManager;
+ _graphicsManager = 0;
+ }
+}
+
+void BadaSystem::setMute(bool on) {
+ // only change mute after eventManager init() has completed
+ if (_audioThread) {
+ BadaGraphicsManager *graphics = getGraphics();
+ if (graphics && graphics->isReady()) {
+ _audioThread->setMute(on);
+ }
+ }
+}
+
+int BadaSystem::setVolume(bool up, bool minMax) {
+ int level = -1;
+ if (_audioThread) {
+ level = _audioThread->setVolume(up, minMax);
+ }
+ return level;
+}
+
+//
+// create the ScummVM system
+//
+BadaAppForm *systemStart(Osp::App::Application *app) {
+ logEntered();
+
+ BadaAppForm *appForm = new BadaAppForm();
+ if (!appForm) {
+ AppLog("Failed to create appForm");
+ return NULL;
+ }
+
+ if (E_SUCCESS != appForm->Construct() ||
+ E_SUCCESS != app->GetAppFrame()->GetFrame()->AddControl(*appForm)) {
+ delete appForm;
+ AppLog("Failed to construct appForm");
+ return NULL;
+ }
+
+ return appForm;
+}
+
+//
+// display a fatal error notification
+//
+void systemError(const char *message) {
+ AppLog("Fatal system error: %s", message);
+
+ ArrayList *args = new ArrayList();
+ args->Construct();
+ args->Add(*(new String(message)));
+ Application::GetInstance()->SendUserEvent(USER_MESSAGE_EXIT_ERR, args);
+
+ if (g_system) {
+ BadaSystem *system = (BadaSystem *)g_system;
+ system->exitSystem();
+ }
+}
diff --git a/backends/platform/bada/system.h b/backends/platform/bada/system.h
new file mode 100644
index 0000000000..c28686cb3d
--- /dev/null
+++ b/backends/platform/bada/system.h
@@ -0,0 +1,102 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef BADA_SYSTEM_H
+#define BADA_SYSTEM_H
+
+#include <FApp.h>
+#include <FGraphics.h>
+#include <FUi.h>
+#include <FSystem.h>
+#include <FBase.h>
+#include <FIoFile.h>
+
+#include "config.h"
+#include "common/scummsys.h"
+#include "backends/modular-backend.h"
+
+#include "backends/platform/bada/fs.h"
+#include "backends/platform/bada/form.h"
+#include "backends/platform/bada/audio.h"
+#include "backends/platform/bada/graphics.h"
+
+#if defined(_DEBUG)
+#define logEntered() AppLog("%s entered (%s %d)", \
+ __FUNCTION__, __FILE__, __LINE__);
+#define logLeaving() AppLog("%s leaving (%s %d)", \
+ __FUNCTION__, __FILE__, __LINE__);
+#else
+#define logEntered()
+#define logLeaving()
+#endif
+
+BadaAppForm *systemStart(Osp::App::Application *app);
+void systemError(const char *message);
+
+#define USER_MESSAGE_EXIT 1000
+#define USER_MESSAGE_EXIT_ERR 1001
+
+//
+// BadaSystem
+//
+class BadaSystem : public ModularBackend,
+ Common::EventSource {
+public:
+ BadaSystem(BadaAppForm *appForm);
+ ~BadaSystem();
+
+ result Construct();
+ void closeAudio();
+ void closeGraphics();
+ void destroyBackend();
+ void setMute(bool on);
+ int setVolume(bool up, bool minMax);
+ void exitSystem();
+ bool isClosing() { return _appForm->isClosing(); }
+
+ BadaGraphicsManager *getGraphics() {
+ return (BadaGraphicsManager *)_graphicsManager;
+ }
+
+private:
+ void initBackend();
+ result initModules();
+
+ void updateScreen();
+ bool pollEvent(Common::Event &event);
+ uint32 getMillis();
+ void delayMillis(uint msecs);
+ void getTimeAndDate(TimeDate &t) const;
+ void fatalError();
+ void logMessage(LogMessageType::Type type, const char *message);
+ void addSysArchivesToSearchSet(Common::SearchSet &s, int priority);
+
+ Common::EventSource *getDefaultEventSource() { return this; }
+ Common::SeekableReadStream *createConfigReadStream();
+ Common::WriteStream *createConfigWriteStream();
+
+ BadaAppForm *_appForm;
+ AudioThread *_audioThread;
+ long long _epoch;
+};
+
+#endif
diff --git a/backends/platform/dc/DCLauncherDialog.h b/backends/platform/dc/DCLauncherDialog.h
index 72df3e15cc..519524222f 100644
--- a/backends/platform/dc/DCLauncherDialog.h
+++ b/backends/platform/dc/DCLauncherDialog.h
@@ -25,4 +25,3 @@ class DCLauncherDialog {
DCLauncherDialog() {}
int runModal();
};
-
diff --git a/backends/platform/dc/README b/backends/platform/dc/README
index e4ebda840e..e26df500e8 100644
--- a/backends/platform/dc/README
+++ b/backends/platform/dc/README
@@ -23,4 +23,3 @@ should get a scrambled binary SCUMMVM.BIN and some plugins *.PLG.
For serial/IP upload, remove the "DYNAMIC_MODULES" line and just run `make',
to get a static binary with the name `scummvm.elf'.
-
diff --git a/backends/platform/dc/audio.cpp b/backends/platform/dc/audio.cpp
index 1fee970a90..35cb51f349 100644
--- a/backends/platform/dc/audio.cpp
+++ b/backends/platform/dc/audio.cpp
@@ -74,5 +74,3 @@ void OSystem_Dreamcast::checkSound()
if ((fillpos += n) >= curr_ring_buffer_samples)
fillpos = 0;
}
-
-
diff --git a/backends/platform/dc/cache.S b/backends/platform/dc/cache.S
index 1a1595a9a1..4beeedcea7 100644
--- a/backends/platform/dc/cache.S
+++ b/backends/platform/dc/cache.S
@@ -35,4 +35,3 @@ ccr_addr:
.long 0xff00001c
ccr_data:
.word 0x0905
-
diff --git a/backends/platform/dc/dc-fs.cpp b/backends/platform/dc/dc-fs.cpp
index ac709f62b9..f30c9c56d1 100644
--- a/backends/platform/dc/dc-fs.cpp
+++ b/backends/platform/dc/dc-fs.cpp
@@ -124,7 +124,7 @@ bool RoninCDDirectoryNode::getChildren(AbstractFSList &myList, ListMode mode, bo
if (mode == Common::FSNode::kListFilesOnly)
continue;
- myList.push_back(new RoninCDDirectoryNode(newPath+"/"));
+ myList.push_back(new RoninCDDirectoryNode(newPath));
} else {
// Honor the chosen mode
if (mode == Common::FSNode::kListDirectoriesOnly)
@@ -165,4 +165,3 @@ AbstractFSNode *OSystem_Dreamcast::makeFileNodePath(const Common::String &path)
AbstractFSNode *node = RoninCDFileNode::makeFileNodePath(path);
return (node? node : new RoninCDNonexistingNode(path));
}
-
diff --git a/backends/platform/dc/dc.h b/backends/platform/dc/dc.h
index bde50daa2d..2e32ff3eb4 100644
--- a/backends/platform/dc/dc.h
+++ b/backends/platform/dc/dc.h
@@ -259,4 +259,3 @@ extern int handleInput(struct mapledev *pad,
int &mouse_x, int &mouse_y,
byte &shiftFlags, Interactive *inter = NULL);
extern bool selectGame(char *&, char *&, Common::Language &, Common::Platform &, class Icon &);
-
diff --git a/backends/platform/dc/dcmain.cpp b/backends/platform/dc/dcmain.cpp
index 06738a687d..3e3279f9c3 100644
--- a/backends/platform/dc/dcmain.cpp
+++ b/backends/platform/dc/dcmain.cpp
@@ -377,4 +377,3 @@ int DCLauncherDialog::runModal()
return 0;
}
-
diff --git a/backends/platform/dc/display.cpp b/backends/platform/dc/display.cpp
index a11e329df3..76658c6590 100644
--- a/backends/platform/dc/display.cpp
+++ b/backends/platform/dc/display.cpp
@@ -732,4 +732,3 @@ int16 OSystem_Dreamcast::getOverlayWidth()
{
return OVL_W;
}
-
diff --git a/backends/platform/dc/input.cpp b/backends/platform/dc/input.cpp
index 3759eec6df..7b21c76efa 100644
--- a/backends/platform/dc/input.cpp
+++ b/backends/platform/dc/input.cpp
@@ -249,4 +249,3 @@ bool OSystem_Dreamcast::pollEvent(Common::Event &event)
return false;
}
}
-
diff --git a/backends/platform/dc/label.cpp b/backends/platform/dc/label.cpp
index 1094dd3fb4..5db031958f 100644
--- a/backends/platform/dc/label.cpp
+++ b/backends/platform/dc/label.cpp
@@ -134,4 +134,3 @@ void Label::draw(float x, float y, unsigned int argb, float scale)
myvertex.cmd |= TA_CMD_VERTEX_EOS;
ta_commit_list(&myvertex);
}
-
diff --git a/backends/platform/dc/plugin_head.S b/backends/platform/dc/plugin_head.S
index 6cbe9eec85..a056f1c0f0 100644
--- a/backends/platform/dc/plugin_head.S
+++ b/backends/platform/dc/plugin_head.S
@@ -3,4 +3,3 @@
.section .dtors,"aw",@progbits
.end
-
diff --git a/backends/platform/dc/selector.cpp b/backends/platform/dc/selector.cpp
index 859f2a40ed..339e5df62d 100644
--- a/backends/platform/dc/selector.cpp
+++ b/backends/platform/dc/selector.cpp
@@ -185,12 +185,24 @@ static void makeDefIcon(Icon &icon)
icon.load(scummvm_icon, sizeof(scummvm_icon));
}
+static bool sameOrSubdir(const char *dir1, const char *dir2)
+{
+ int l1 = strlen(dir1), l2 = strlen(dir2);
+ if (l1<=l2)
+ return !strcmp(dir1, dir2);
+ else
+ return !memcmp(dir1, dir2, l2);
+}
+
static bool uniqueGame(const char *base, const char *dir,
Common::Language lang, Common::Platform plf,
Game *games, int cnt)
{
while (cnt--)
- if (!strcmp(dir, games->dir) &&
+ if (/*Don't detect the same game in a subdir,
+ this is a workaround for the detector bug in toon... */
+ sameOrSubdir(dir, games->dir) &&
+ /*!strcmp(dir, games->dir) &&*/
!stricmp(base, games->filename_base) &&
lang == games->language &&
plf == games->platform)
@@ -237,19 +249,24 @@ static int findGames(Game *games, int max, bool use_ini)
}
while ((curr_game < max || use_ini) && curr_dir < num_dirs) {
- strncpy(dirs[curr_dir].name, dirs[curr_dir].node.getPath().c_str(), 252);
- dirs[curr_dir].name[251] = '\0';
+ strncpy(dirs[curr_dir].name, dirs[curr_dir].node.getPath().c_str(), 251);
+ dirs[curr_dir].name[250] = '\0';
+ if (!dirs[curr_dir].name[0] ||
+ dirs[curr_dir].name[strlen(dirs[curr_dir].name)-1] != '/')
+ strcat(dirs[curr_dir].name, "/");
dirs[curr_dir].deficon[0] = '\0';
Common::FSList files, fslist;
dirs[curr_dir++].node.getChildren(fslist, Common::FSNode::kListAll);
for (Common::FSList::const_iterator entry = fslist.begin(); entry != fslist.end();
++entry) {
if (entry->isDirectory()) {
- if (!use_ini && num_dirs < MAX_DIR &&
- strcasecmp(entry->getDisplayName().c_str(), "install")) {
+ if (!use_ini && num_dirs < MAX_DIR) {
dirs[num_dirs].node = *entry;
num_dirs++;
}
+ /* Toonstruck detector needs directories to be present too */
+ if(!use_ini)
+ files.push_back(*entry);
} else
if (isIcon(*entry))
strcpy(dirs[curr_dir-1].deficon, entry->getDisplayName().c_str());
diff --git a/backends/platform/dingux/README.DINGUX b/backends/platform/dingux/README.DINGUX
index d867e02f03..04f0d30844 100644
--- a/backends/platform/dingux/README.DINGUX
+++ b/backends/platform/dingux/README.DINGUX
@@ -65,4 +65,3 @@ I still raccomand the use of opendingux kernel + rootfs, but if you don't, this
image plus another kernel (eg. SiENcE's one) should be do the job.
Enjoy
-
diff --git a/backends/platform/dingux/scummvm.gpe b/backends/platform/dingux/scummvm.gpe
index 84ab0c6b95..ce5d174a5c 100644
--- a/backends/platform/dingux/scummvm.gpe
+++ b/backends/platform/dingux/scummvm.gpe
@@ -2,4 +2,3 @@
HOME=`pwd`
$HOME/scummvm.elf
-
diff --git a/backends/platform/ds/arm7/source/libcartreset/cartreset.c b/backends/platform/ds/arm7/source/libcartreset/cartreset.c
index db2f3cfddc..85be823b71 100644
--- a/backends/platform/ds/arm7/source/libcartreset/cartreset.c
+++ b/backends/platform/ds/arm7/source/libcartreset/cartreset.c
@@ -104,6 +104,3 @@ void cartExecute()
}
#endif
-
-
-
diff --git a/backends/platform/ds/arm7/source/libcartreset/cartreset_nolibfat.h b/backends/platform/ds/arm7/source/libcartreset/cartreset_nolibfat.h
index f1faebea37..98808f79c5 100644
--- a/backends/platform/ds/arm7/source/libcartreset/cartreset_nolibfat.h
+++ b/backends/platform/ds/arm7/source/libcartreset/cartreset_nolibfat.h
@@ -54,4 +54,3 @@ void cartExecute();
#endif
#endif
-
diff --git a/backends/platform/ds/arm7/source/main.cpp b/backends/platform/ds/arm7/source/main.cpp
index 6b5a0ec321..2e9cacc669 100644
--- a/backends/platform/ds/arm7/source/main.cpp
+++ b/backends/platform/ds/arm7/source/main.cpp
@@ -650,4 +650,3 @@ int main(int argc, char ** argv) {
//////////////////////////////////////////////////////////////////////
-
diff --git a/backends/platform/ds/arm9/dist/readme_ds.txt b/backends/platform/ds/arm9/dist/readme_ds.txt
index 24c85ad556..dc37fecce5 100644
--- a/backends/platform/ds/arm9/dist/readme_ds.txt
+++ b/backends/platform/ds/arm9/dist/readme_ds.txt
@@ -861,8 +861,3 @@ For other builds, substitute the letters b - g in the above line.
To build everything, type:
make allbuildssafe
-
-
-
-
-
diff --git a/backends/platform/ds/arm9/source/dsoptions.cpp b/backends/platform/ds/arm9/source/dsoptions.cpp
index 263ca58705..7154d4ae3f 100644
--- a/backends/platform/ds/arm9/source/dsoptions.cpp
+++ b/backends/platform/ds/arm9/source/dsoptions.cpp
@@ -433,4 +433,3 @@ void setOptions() {
}
} // End of namespace DS
-
diff --git a/backends/platform/ds/arm9/source/fat/disc_io.h b/backends/platform/ds/arm9/source/fat/disc_io.h
index 0fc83a7493..cd930ba454 100644
--- a/backends/platform/ds/arm9/source/fat/disc_io.h
+++ b/backends/platform/ds/arm9/source/fat/disc_io.h
@@ -218,4 +218,3 @@ typedef struct {
#endif
#endif // define DISC_IO_H
-
diff --git a/backends/platform/ds/arm9/source/fat/io_m3_common.c b/backends/platform/ds/arm9/source/fat/io_m3_common.c
index 9c8280c808..e3232a4df6 100644
--- a/backends/platform/ds/arm9/source/fat/io_m3_common.c
+++ b/backends/platform/ds/arm9/source/fat/io_m3_common.c
@@ -57,4 +57,3 @@ void _M3_changeMode (u32 mode) {
_M3_readHalfword (0x08000188);
}
}
-
diff --git a/backends/platform/ds/arm9/source/fat/io_m3_common.h b/backends/platform/ds/arm9/source/fat/io_m3_common.h
index 6d0c669783..6a0cc03c2e 100644
--- a/backends/platform/ds/arm9/source/fat/io_m3_common.h
+++ b/backends/platform/ds/arm9/source/fat/io_m3_common.h
@@ -45,4 +45,3 @@
extern void _M3_changeMode (u32 mode);
#endif // IO_M3_COMMON_H
-
diff --git a/backends/platform/ds/arm9/source/fat/io_m3sd_asm.s b/backends/platform/ds/arm9/source/fat/io_m3sd_asm.s
index a6bb8dc187..f2bcce7da9 100644
--- a/backends/platform/ds/arm9/source/fat/io_m3sd_asm.s
+++ b/backends/platform/ds/arm9/source/fat/io_m3sd_asm.s
@@ -193,4 +193,3 @@ sd_data_write_busy2:
ldmfd r13!,{r4-r5,r15}
@-----------------end-------------------
-
diff --git a/backends/platform/ds/arm9/source/fat/io_njsd.c b/backends/platform/ds/arm9/source/fat/io_njsd.c
index b9cb52aa00..12388da8e9 100644
--- a/backends/platform/ds/arm9/source/fat/io_njsd.c
+++ b/backends/platform/ds/arm9/source/fat/io_njsd.c
@@ -678,4 +678,4 @@ LPIO_INTERFACE NJSD_GetInterface(void) {
} ;
#endif // defined NDS
-#endif \ No newline at end of file
+#endif
diff --git a/backends/platform/ds/arm9/source/fat/io_scsd.c b/backends/platform/ds/arm9/source/fat/io_scsd.c
index 0a6ab5a528..270691436d 100644
--- a/backends/platform/ds/arm9/source/fat/io_scsd.c
+++ b/backends/platform/ds/arm9/source/fat/io_scsd.c
@@ -103,4 +103,4 @@ LPIO_INTERFACE SCSD_GetInterface(void) {
return &io_scsd ;
} ;
-#endif \ No newline at end of file
+#endif
diff --git a/backends/platform/ds/arm9/source/fat/io_scsd_asm.s b/backends/platform/ds/arm9/source/fat/io_scsd_asm.s
index 390d36afeb..a33fa6af35 100644
--- a/backends/platform/ds/arm9/source/fat/io_scsd_asm.s
+++ b/backends/platform/ds/arm9/source/fat/io_scsd_asm.s
@@ -508,14 +508,3 @@ MemoryCard_IsInserted:
@----------------end MemoryCard_IsInserted---------------
.END
-
-
-
-
-
-
-
-
-
-
-
diff --git a/backends/platform/ds/arm9/source/fat/io_sd_common.c b/backends/platform/ds/arm9/source/fat/io_sd_common.c
index ade9df0d80..e7ab472e1b 100644
--- a/backends/platform/ds/arm9/source/fat/io_sd_common.c
+++ b/backends/platform/ds/arm9/source/fat/io_sd_common.c
@@ -199,5 +199,3 @@ bool _SD_InitCard (_SD_FN_CMD_6BYTE_RESPONSE cmd_6byte_response,
return true;
}
-
-
diff --git a/backends/platform/ds/arm9/source/fat/m3sd.s b/backends/platform/ds/arm9/source/fat/m3sd.s
index f6fab1a9e2..899cbc7927 100644
--- a/backends/platform/ds/arm9/source/fat/m3sd.s
+++ b/backends/platform/ds/arm9/source/fat/m3sd.s
@@ -197,4 +197,3 @@ DC_FlushRangeLoop:
bx lr
@---------------------------------------
.end
-
diff --git a/backends/platform/ds/arm9/source/keys.cpp b/backends/platform/ds/arm9/source/keys.cpp
index 2f8497ab19..aec7d57bda 100644
--- a/backends/platform/ds/arm9/source/keys.cpp
+++ b/backends/platform/ds/arm9/source/keys.cpp
@@ -134,4 +134,3 @@ uint32 keysUp(void) {
} // End of namespace DS
-
diff --git a/backends/platform/ds/arm9/source/osystem_ds.cpp b/backends/platform/ds/arm9/source/osystem_ds.cpp
index b157a3a87a..fdd310ec17 100644
--- a/backends/platform/ds/arm9/source/osystem_ds.cpp
+++ b/backends/platform/ds/arm9/source/osystem_ds.cpp
@@ -901,5 +901,3 @@ void OSystem_DS::engineDone() {
#endif
}
-
-
diff --git a/backends/platform/ds/arm9/source/scummhelp.cpp b/backends/platform/ds/arm9/source/scummhelp.cpp
index 670b46a3b9..112ba49d76 100644
--- a/backends/platform/ds/arm9/source/scummhelp.cpp
+++ b/backends/platform/ds/arm9/source/scummhelp.cpp
@@ -98,4 +98,3 @@ void updateStrings(byte gameId, byte version, Common::Platform platform,
#undef ADD_BIND
#undef ADD_TEXT
#undef ADD_LINE
-
diff --git a/backends/platform/ds/ds.mk b/backends/platform/ds/ds.mk
index 654475e1f3..78216cb9a2 100644
--- a/backends/platform/ds/ds.mk
+++ b/backends/platform/ds/ds.mk
@@ -236,4 +236,3 @@ $(ndsdir)/arm7/arm7.bin: $(ndsdir)/arm7/arm7.elf
#
# Fingolfin used
# CXX=arm-eabi-g++ CC=arm-eabi-gcc ./configure --host=arm-elf --enable-speed --enable-sso -enable-fpm=arm CFLAGS='-specs=ds_arm9.specs -mthumb-interwork' --disable-shared --disable-debugging LDFLAGS=$DEVKITPRO/libnds/lib/libnds9.a
-
diff --git a/backends/platform/gph/build/gp2xwiz-bundle.sh b/backends/platform/gph/build/gp2xwiz-bundle.sh
index 579e2dc77b..2182f207c3 100644
--- a/backends/platform/gph/build/gp2xwiz-bundle.sh
+++ b/backends/platform/gph/build/gp2xwiz-bundle.sh
@@ -2,6 +2,16 @@
echo Quick script to make building a distribution of the GP2X Wiz backend more consistent.
+# Set the paths up here to support the build.
+
+export PATH=/opt/open2x/gcc-4.1.1-glibc-2.3.6/arm-open2x-linux/bin:$PATH
+export PATH=/opt/open2x/gcc-4.1.1-glibc-2.3.6/bin:$PATH
+export CXX=arm-open2x-linux-g++
+export CC=arm-open2x-linux-gcc
+export CXXFLAGS=-march=armv4t
+export LDFLAGS=-static
+export ASFLAGS=-mfloat-abi=soft
+
cd ../../../..
echo Building ScummVM for GP2X Wiz.
diff --git a/backends/platform/gph/devices/gp2x/mmuhack/readme.txt b/backends/platform/gph/devices/gp2x/mmuhack/README
index bea49d7d6d..6db7d81845 100644
--- a/backends/platform/gph/devices/gp2x/mmuhack/readme.txt
+++ b/backends/platform/gph/devices/gp2x/mmuhack/README
@@ -1,3 +1,10 @@
+PLEASE NOTE:
+
+The binary object 'mmuhack.o' is stored in the source tree as it is very awkward to
+build it manually each time and would require the use of 2 toolchains to do so.
+
+Notes on how to rebuild from the included source can be found below.
+
About
-----
@@ -107,4 +114,3 @@ Credits
Original idea/implementation: Squidge (this whole thing is also known as squidgehack)
Kernel module: NK
Documentation: notaz
-
diff --git a/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.h b/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.h
index 520841ace7..d01548e474 100644
--- a/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.h
+++ b/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.h
@@ -8,4 +8,3 @@ void flush_uppermem_cache(void *start_address, void *end_address, int flags);
#ifdef __cplusplus
}
#endif
-
diff --git a/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.s b/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.s
index 17628c156a..265908e1fd 100644
--- a/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.s
+++ b/backends/platform/gph/devices/gp2x/mmuhack/flush_uppermem_cache.s
@@ -3,4 +3,3 @@
flush_uppermem_cache:
swi #0x9f0002
bx lr
-
diff --git a/backends/platform/gph/gph-backend.cpp b/backends/platform/gph/gph-backend.cpp
index ae3466b836..49a1edf411 100644
--- a/backends/platform/gph/gph-backend.cpp
+++ b/backends/platform/gph/gph-backend.cpp
@@ -25,10 +25,9 @@
#include "backends/platform/sdl/sdl-sys.h"
-// #include "backends/platform/gph/gph-options.h"
#include "backends/mixer/doublebuffersdl/doublebuffersdl-mixer.h"
#include "backends/platform/gph/gph-hw.h"
-#include "backends/platform/gph/gph-sdl.h"
+#include "backends/platform/gph/gph.h"
#include "backends/plugins/posix/posix-provider.h"
#include "backends/saves/default/default-saves.h"
#include "backends/timer/default/default-timer.h"
@@ -51,7 +50,7 @@
#include <limits.h>
#include <errno.h>
#include <sys/stat.h>
-#include <time.h> // for getTimeAndDate()
+#include <time.h> // for getTimeAndDate()
/* Dump console info to files. */
#define DUMP_STDOUT
@@ -104,49 +103,50 @@ void OSystem_GPH::initBackend() {
_savefileManager = new DefaultSaveFileManager(savePath);
- #ifdef DUMP_STDOUT
- // The GP2X Wiz has a serial console on the breakout board but most users do not use this so we
- // output all our STDOUT and STDERR to files for debug purposes.
- char STDOUT_FILE[PATH_MAX+1];
- char STDERR_FILE[PATH_MAX+1];
-
- strcpy(STDOUT_FILE, workDirName);
- strcpy(STDERR_FILE, workDirName);
- strcat(STDOUT_FILE, "/scummvm.stdout.txt");
- strcat(STDERR_FILE, "/scummvm.stderr.txt");
-
- // Flush the output in case anything is queued
- fclose(stdout);
- fclose(stderr);
-
- // Redirect standard input and standard output
- FILE *newfp = freopen(STDOUT_FILE, "w", stdout);
- if (newfp == NULL) {
- #if !defined(stdout)
- stdout = fopen(STDOUT_FILE, "w");
- #else
- newfp = fopen(STDOUT_FILE, "w");
- if (newfp) {
- *stdout = *newfp;
- }
- #endif
+#ifdef DUMP_STDOUT
+ // The GPH devices have a serial console on the breakout board
+ // but most users do not use this so we output all our STDOUT
+ // and STDERR to files for debug purposes.
+ char STDOUT_FILE[PATH_MAX+1];
+ char STDERR_FILE[PATH_MAX+1];
+
+ strcpy(STDOUT_FILE, workDirName);
+ strcpy(STDERR_FILE, workDirName);
+ strcat(STDOUT_FILE, "/scummvm.stdout.txt");
+ strcat(STDERR_FILE, "/scummvm.stderr.txt");
+
+ // Flush the output in case anything is queued
+ fclose(stdout);
+ fclose(stderr);
+
+ // Redirect standard input and standard output
+ FILE *newfp = freopen(STDOUT_FILE, "w", stdout);
+ if (newfp == NULL) {
+#if !defined(stdout)
+ stdout = fopen(STDOUT_FILE, "w");
+#else
+ newfp = fopen(STDOUT_FILE, "w");
+ if (newfp) {
+ *stdout = *newfp;
}
+#endif
+ }
- newfp = freopen(STDERR_FILE, "w", stderr);
- if (newfp == NULL) {
- #if !defined(stderr)
- stderr = fopen(STDERR_FILE, "w");
- #else
- newfp = fopen(STDERR_FILE, "w");
- if (newfp) {
- *stderr = *newfp;
- }
- #endif
+ newfp = freopen(STDERR_FILE, "w", stderr);
+ if (newfp == NULL) {
+#if !defined(stderr)
+ stderr = fopen(STDERR_FILE, "w");
+#else
+ newfp = fopen(STDERR_FILE, "w");
+ if (newfp) {
+ *stderr = *newfp;
}
+#endif
+ }
- setbuf(stderr, NULL);
- printf("%s\n", "Debug: STDOUT and STDERR redirected to text files.");
- #endif /* DUMP_STDOUT */
+ setbuf(stderr, NULL);
+ printf("%s\n", "Debug: STDOUT and STDERR redirected to text files.");
+#endif /* DUMP_STDOUT */
/* Initialize any GP2X Wiz specific stuff we may want (Batt Status, scaler etc.) */
WIZ_HW::deviceInit();
@@ -169,9 +169,6 @@ void OSystem_GPH::initBackend() {
/* Make sure SDL knows that we have a joystick we want to use. */
ConfMan.setInt("joystick_num", 0);
- /* Now setup any device specific user options (Left handed mode, that sort of thing). */
- // GPH::setOptions();
-
/* Pass to POSIX method to do the heavy lifting */
OSystem_POSIX::initBackend();
@@ -217,11 +214,11 @@ void OSystem_GPH::quit() {
WIZ_HW::deviceDeinit();
- #ifdef DUMP_STDOUT
- printf("%s\n", "Debug: STDOUT and STDERR text files closed.");
- fclose(stdout);
- fclose(stderr);
- #endif /* DUMP_STDOUT */
+#ifdef DUMP_STDOUT
+ printf("%s\n", "Debug: STDOUT and STDERR text files closed.");
+ fclose(stdout);
+ fclose(stderr);
+#endif /* DUMP_STDOUT */
OSystem_POSIX::quit();
}
diff --git a/backends/platform/gph/gph-hw.cpp b/backends/platform/gph/gph-hw.cpp
index 2d70158001..cde50dc6b4 100644
--- a/backends/platform/gph/gph-hw.cpp
+++ b/backends/platform/gph/gph-hw.cpp
@@ -43,13 +43,13 @@
namespace WIZ_HW {
enum {
- VOLUME_NOCHG = 0,
- VOLUME_DOWN = 1,
- VOLUME_UP = 2,
- VOLUME_CHANGE_RATE = 8,
- VOLUME_MIN = 0,
- VOLUME_INITIAL = 60,
- VOLUME_MAX = 100
+ VOLUME_NOCHG = 0,
+ VOLUME_DOWN = 1,
+ VOLUME_UP = 2,
+ VOLUME_CHANGE_RATE = 8,
+ VOLUME_MIN = 0,
+ VOLUME_INITIAL = 60,
+ VOLUME_MAX = 100
};
int volumeLevel = VOLUME_INITIAL;
@@ -61,24 +61,24 @@ void deviceDeinit() {
}
void mixerMoveVolume(int direction) {
- if (volumeLevel <= 10) {
- if (direction == VOLUME_UP) volumeLevel += VOLUME_CHANGE_RATE/2;
- if (direction == VOLUME_DOWN) volumeLevel -= VOLUME_CHANGE_RATE/2;
- } else {
- if (direction == VOLUME_UP) volumeLevel += VOLUME_CHANGE_RATE;
- if (direction == VOLUME_DOWN) volumeLevel -= VOLUME_CHANGE_RATE;
- }
-
- if (volumeLevel < VOLUME_MIN) volumeLevel = VOLUME_MIN;
- if (volumeLevel > VOLUME_MAX) volumeLevel = VOLUME_MAX;
-
- unsigned long soundDev = open("/dev/mixer", O_RDWR);
-
- if (soundDev) {
- int vol = ((volumeLevel << 8) | volumeLevel);
- ioctl(soundDev, SOUND_MIXER_WRITE_PCM, &vol);
- close(soundDev);
- }
+ if (volumeLevel <= 10) {
+ if (direction == VOLUME_UP) volumeLevel += VOLUME_CHANGE_RATE / 2;
+ if (direction == VOLUME_DOWN) volumeLevel -= VOLUME_CHANGE_RATE / 2;
+ } else {
+ if (direction == VOLUME_UP) volumeLevel += VOLUME_CHANGE_RATE;
+ if (direction == VOLUME_DOWN) volumeLevel -= VOLUME_CHANGE_RATE;
+ }
+
+ if (volumeLevel < VOLUME_MIN) volumeLevel = VOLUME_MIN;
+ if (volumeLevel > VOLUME_MAX) volumeLevel = VOLUME_MAX;
+
+ unsigned long soundDev = open("/dev/mixer", O_RDWR);
+
+ if (soundDev) {
+ int vol = ((volumeLevel << 8) | volumeLevel);
+ ioctl(soundDev, SOUND_MIXER_WRITE_PCM, &vol);
+ close(soundDev);
+ }
}
} /* namespace WIZ_HW */
@@ -87,9 +87,9 @@ namespace GPH {
enum {
/* Touchscreen TapMode */
- TAPMODE_LEFT = 0,
- TAPMODE_RIGHT = 1,
- TAPMODE_HOVER = 2
+ TAPMODE_LEFT = 0,
+ TAPMODE_RIGHT = 1,
+ TAPMODE_HOVER = 2
};
int tapmodeLevel = TAPMODE_LEFT;
@@ -103,7 +103,7 @@ void ToggleTapMode() {
tapmodeLevel = TAPMODE_LEFT;
} else {
tapmodeLevel = TAPMODE_LEFT;
- }
+ }
}
} /* namespace GPH */
diff --git a/backends/platform/gph/gph-hw.h b/backends/platform/gph/gph-hw.h
index 0a1205156b..f9584ca37e 100644
--- a/backends/platform/gph/gph-hw.h
+++ b/backends/platform/gph/gph-hw.h
@@ -32,9 +32,9 @@ namespace WIZ_HW {
extern int volumeLevel;
-extern void deviceInit();
-extern void deviceDeinit();
-extern void mixerMoveVolume(int);
+extern void deviceInit();
+extern void deviceDeinit();
+extern void mixerMoveVolume(int);
} /* namespace WIZ_HW */
@@ -42,7 +42,7 @@ namespace GPH {
extern int tapmodeLevel;
-extern void ToggleTapMode();
+extern void ToggleTapMode();
} /* namespace GPH */
diff --git a/backends/platform/gph/gph-main.cpp b/backends/platform/gph/gph-main.cpp
index 1a8c6686ca..2c43af151f 100644
--- a/backends/platform/gph/gph-main.cpp
+++ b/backends/platform/gph/gph-main.cpp
@@ -20,7 +20,7 @@
*
*/
-#include "backends/platform/gph/gph-sdl.h"
+#include "backends/platform/gph/gph.h"
#include "backends/plugins/posix/posix-provider.h"
#include "base/main.h"
@@ -43,7 +43,7 @@ int main(int argc, char *argv[]) {
int res = scummvm_main(argc, argv);
// Free OSystem
- delete (OSystem_GPH *)g_system;
+ delete(OSystem_GPH *)g_system;
return res;
}
diff --git a/backends/platform/gph/gph-sdl.h b/backends/platform/gph/gph.h
index 8b943f98f3..80f43f0bab 100644
--- a/backends/platform/gph/gph-sdl.h
+++ b/backends/platform/gph/gph.h
@@ -34,7 +34,7 @@
#define __GP2XWIZ__
#ifndef PATH_MAX
- #define PATH_MAX 255
+#define PATH_MAX 255
#endif
class OSystem_GPH : public OSystem_POSIX {
diff --git a/backends/platform/iphone/iphone_main.m b/backends/platform/iphone/iphone_main.m
index 7bb5f0c317..c2ec328bf5 100644
--- a/backends/platform/iphone/iphone_main.m
+++ b/backends/platform/iphone/iphone_main.m
@@ -137,4 +137,3 @@ int main(int argc, char** argv) {
}
@end
-
diff --git a/backends/platform/iphone/iphone_video.m b/backends/platform/iphone/iphone_video.m
index 04d25cebf8..eb16676428 100644
--- a/backends/platform/iphone/iphone_video.m
+++ b/backends/platform/iphone/iphone_video.m
@@ -754,4 +754,3 @@ bool getLocalMouseCoords(CGPoint *point) {
}
@end
-
diff --git a/backends/platform/maemo/debian/changelog b/backends/platform/maemo/debian/changelog
new file mode 100644
index 0000000000..d3e0287186
--- /dev/null
+++ b/backends/platform/maemo/debian/changelog
@@ -0,0 +1,227 @@
+scummvm (1.4.0~git) unstable; urgency=low
+
+ * development snapshot
+
+ -- Tarek Soliman <tsoliman@scummvm.org> Wed, 05 Oct 2011 19:01:25 -0500
+
+scummvm (1.2.1~pre) unstable; urgency=low
+
+ * 1.2.1 testing release
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 8 Dec 2010 21:43:29 +0100
+scummvm (1.2.0~pre) unstable; urgency=low
+
+ * 1.2.0 testing release
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Fri, 8 Oct 2010 21:38:12 +0200
+scummvm (1.1.0~pre) unstable; urgency=low
+
+ * 1.1.0 testing release
+ * cleanup for N900 (new firmwares need less hacks)
+ * unified binary for all devices now have datafiles included (~2MB)
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 24 Mar 2010 01:48:05 +0100
+scummvm (1.0.0-4) unstable; urgency=low
+
+ * datadir optified (/usr/share/scummvm -> /opt/scummvm/share)
+ * added engine files to datadir
+ * Application Manager icon enlarged to 48x48
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Thu, 17 Dec 2009 13:54:51 +0100
+scummvm (1.0.0-3) unstable; urgency=low
+
+ * disable taskmanager topleft button in fullscreen mode (N900)
+ * map shift+click to right button click
+ * mam ctrl+click to mouse move (no click)
+ * set fullscreen window as _HILDON_NON_COMPOSITED_WINDOW (N900)
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Tue, 15 Dec 2009 23:12:51 +0100
+scummvm (1.0.0-2) unstable; urgency=low
+
+ * grab N900 volume keys
+ * map Shift+Backspace to Escape key, shift+enter to Menu key (N900)
+ * optified = main binary moved to /opt/scummvm/bin/scummvm
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Sat, 12 Dec 2009 23:39:04 +0100
+scummvm (1.0.0-1) unstable; urgency=low
+
+ * -mcpu=arm1136j-s -mfpu=vfp -mfloat-abi=softfp breaks Gobliins, reverted
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 2 Dec 2009 10:25:11 +0100
+scummvm (1.0.0) unstable; urgency=low
+
+ * upstream 1.0 release
+ * Initial support for N900
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Fri, 6 Nov 2009 22:02:25 +0100
+scummvm (1.0.0~rc1-3) unstable; urgency=low
+
+ * updated to 1.0 branch revision 43999 to fix bugs (Cruise pause, ..)
+ * Cruise for Corpse mapping added to zoom+ for N800/770
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 7 Sep 2009 09:03:13 +0200
+scummvm (1.0.0~rc1-2) unstable; urgency=low
+
+ * Cruise for Corpse key bindings added
+ - menu key for menu, zoom-=right click, zoom+=context menu
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 2 Sep 2009 23:03:59 +0200
+scummvm (1.0.0~rc1-1) unstable; urgency=low
+
+ * Discworld key bindings added - menu key for menu, zoom-=right click, zoom+=Enter/y key
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 2 Sep 2009 09:53:08 +0200
+scummvm (1.0.0~rc1) unstable; urgency=low
+
+ * upstream 1.0.0rc1 release
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Thu, 20 Aug 2009 23:33:59 +0200
+scummvm (0.13.1) unstable; urgency=low
+
+ * upstream 0.13.1 release
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Sat, 18 Apr 2009 22:40:42 +0200
+scummvm (0.13.0-2) unstable; urgency=low
+
+ * dbus_service.patch is incomplete - needs also install line in debian/rules
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Fri, 27 Feb 2009 20:37:29 +0100
+scummvm (0.13.0-1) unstable; urgency=low
+
+ * fix crash in task switcher caption code when .scummvmrc had fullscreen value set
+ * enabled also dbus_service.patch for home key switching back (not needed in OS < 2008)
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Fri, 27 Feb 2009 09:29:01 +0100
+scummvm (0.13.0) unstable; urgency=low
+
+ * upstream 0.13.0 release
+ * Feeble Files mapping
+ * task switcher item name patch from mikkov
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 18 Feb 2009 21:52:33 +0100
+scummvm (0.11.99-4) unstable; urgency=low
+
+ * Maemo extras-devel test version
+ - maemo-taskswitcher.patch: title shown right from the beginning
+ and title not fixed to "ScummVM" only
+ - dbus_service.patch: modify scummvm.desktop, scummvm.wrapper and
+ scummvm.service to make switching application automatically back
+ via second home key long press to work
+
+ -- Mikko Vartiainen <mvartiainen@gmail.com> Thu, 03 Jan 2009 01:59:52 +0200
+scummvm (0.11.99-3) unstable; urgency=low
+
+ * Maemo extras-devel test version
+ - maemo-taskswitcher.patch
+
+ -- Mikko Vartiainen <mvartiainen@gmail.com> Thu, 01 Jan 2009 13:13:13 +0200
+scummvm (0.11.99-2) unstable; urgency=low
+
+ * Maemo extras-devel test version
+ - keeping version below 0.12.0
+ - not in user/ category
+
+ -- Mikko Vartiainen <mvartiainen@gmail.com> Thu, 01 Jan 2009 02:04:14 +0200
+scummvm (0.12.0) unstable; urgency=low
+
+ * upstream 0.12.0 release
+ * update description
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 25 Aug 2008 21:47:41 +0200
+scummvm (0.11.99) unstable; urgency=low
+
+ * upstream 0.12.0 testing pre-release
+ * big icons added for OS2008 menu
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Fri, 22 Aug 2008 08:20:48 +0200
+scummvm (0.11.1) unstable; urgency=low
+
+ * upstream 0.11.1 release
+ * mapping for N810: zoom+ = menu for all games (except FW)
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Sat, 23 Feb 2008 20:41:37 +0100
+scummvm (0.11.0-2) unstable; urgency=low
+
+ * mapping for N800/770: zoom+ = y, zoom- = 1 (all games except FW)
+ this fixes save dialog in BS1 and also allows to exit some games via 'y'
+ * mapping for N810: zoom- = rightclick for all games
+ * updated to revision 30849 from 0.11 branch (some bugfixes for 0.11.1)
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 11 Feb 2008 22:22:48 +0100
+scummvm (0.11.0-1) unstable; urgency=low
+
+ * theme files added back
+ * SWORD2,SAGA - added zoom keys =1/2 for saved games
+ * different mapping for N810 rightclick=zoom-,menu=zoom+ (currently only in LURE)
+ * added NEWS README COPYRIGHT do doc dir as per scummvm project guidelines
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Sun, 13 Jan 2008 22:58:41 +0100
+scummvm (0.11.0-0) unstable; urgency=low
+
+ * upstream 0.11 release
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Sat, 12 Jan 2008 22:26:34 +0100
+scummvm (0.10.0-5) unstable; urgency=low
+
+ * fixed for chinook, menu selection postinst script added
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Thu, 25 Oct 2007 09:56:32 +0200
+scummvm (0.10.0-4) unstable; urgency=low
+
+ * AGI - added pred.dic to DATA_PATH (=/usr/share/scummvm) to enable
+ predictive input
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Tue, 28 Aug 2007 09:58:29 +0200
+scummvm (0.10.0-3) unstable; urgency=low
+
+ * SCUMM - added mapping also for key up events (may fix right button in FT?)
+ * SWORD2 - added right button press mapping (not tested)
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 20 Aug 2007 22:39:07 +0200
+scummvm (0.10.0-2) unstable; urgency=low
+
+ * Future Wars - add mapping for left/up/down/right,zoom +/-
+ * fix SDL backend to set mouse position on button down event
+ as we may not have mousemove events with touchscreen
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Fri, 13 Jul 2007 09:56:37 +0200
+scummvm (0.10.0-1) unstable; urgency=low
+
+ * mapped F10 in Future Wars to menu key
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 11 Jul 2007 22:20:00 +0200
+scummvm (0.10.0) unstable; urgency=low
+
+ * upstream 0.10 release, enabled FLAC too
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 4 Jul 2007 12:48:48 +0200
+scummvm (0.9.1-1) unstable; urgency=low
+
+ * 0.9.1 mapped right mouse button in sword1
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 18 Jun 2007 21:15:31 +0200
+scummvm (0.9.1) unstable; urgency=low
+
+ * 0.9.1 upstream release
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 1 Nov 2006 20:40:51 +0100
+scummvm (0.9.0-3) unstable; urgency=low
+
+ * merged fixes in 0.9.0 upstream branch
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 9 Oct 2006 15:40:59 +0200
+scummvm (0.9.0-2) unstable; urgency=low
+
+ * merged fixes in 0.9.0 upstream branch
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Sat, 12 Aug 2006 20:10:47 +0200
+scummvm (0.9.0-1) unstable; urgency=low
+
+ * merged changes in 0.9.0 upstream release
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Sun, 23 Jul 2006 22:29:51 +0200
+scummvm (0.9.0) unstable; urgency=low
+
+ * 0.9.0 upstream release
+
+ -- Frantisek Dufka <dufkaf@seznam.cz> Tue, 27 Jun 2006 20:30:54 +0200
diff --git a/backends/platform/maemo/debian/compat b/backends/platform/maemo/debian/compat
new file mode 100644
index 0000000000..b8626c4cff
--- /dev/null
+++ b/backends/platform/maemo/debian/compat
@@ -0,0 +1 @@
+4
diff --git a/backends/platform/maemo/debian/control b/backends/platform/maemo/debian/control
new file mode 100644
index 0000000000..a1f0d95002
--- /dev/null
+++ b/backends/platform/maemo/debian/control
@@ -0,0 +1,51 @@
+Source: scummvm
+Section: user/games
+Priority: optional
+Maintainer: Tarek Soliman <tsoliman@scummvm.org>
+Build-Depends: debhelper (>> 4.0.0), libsdl1.2-dev, libmad0-dev, libasound2-dev, libvorbisidec-dev, libmpeg2-4-dev, libflac-dev (>= 1.1.2), libz-dev, quilt
+
+Standards-Version: 3.6.1.1
+Package: scummvm
+Depends: ${shlibs:Depends}
+Architecture: i386 armel
+Section: user/games
+Description: interpreter that will play graphic adventure games
+ written for LucasArts' SCUMM virtual machine, Sierra's AGI adventures,
+ Adventure Soft's Simon the Sorcerer 1, 2 and Feeble Files,
+ Revolution Software's Beneath a Steel Sky and Broken Sword 1 and 2,
+ Interactive Binary Illusions' Flight of the Amazon Queen,
+ Coktel Vision's Gobliiins, Wyrmkeep's Inherit the Earth,
+ Westwood's Legend of Kyrandia, and various others.
+ This package does not contain any actual games.
+XBS-Maemo-Icon-26:
+ iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAC/VBMVEUICwcH
+ CQUKDAgLDQoMDwsOEAwREAUPEQ0QEg8PFQoRExAUEwoVFAwPGAcTFBIRFg0W
+ FQ0XFg4RGgkTGA8XGQsTGwwUHA0aGRIWGxMXHQkVHQ8aGhMbGxQcHQocGxUZ
+ HwsYIgcfHxgeIRUbJQwhIBofJAweJwgfKQocKwwgKgshKw0gLggfLg8jLQ8n
+ LwwpLhEmMwcoMRQjNgotLCYmNwQlNwwqOBQtOQgsOQ8xNh4sPQswNyQqQAUw
+ PAsuOiAsQgcwOyIqRgIsSAQvRgs0PyY1Rg06RA0+PDAwSwg2RxUzTQE4TQsz
+ VAc/SSo6VAk4VwE6VRM2XAVAUC85XwlJVCNEXQo+YwJGXwxMWS1JXC5AagBI
+ awJUagRIcQBSbwpHeAJTaD9OdwNXcwJKewZNfABacRlOfQBPfgBQfwBMggBW
+ fgBNgwNSgQJOhAVecUJjdSZefwNUiABZhgBjeDZieDxhezFQjQBgghZkhQ5j
+ iQJUkAZcixJmgDZnhCtckQpblgBekw5clwBqgkthlQBdmAJriz90hz5omgBs
+ mAhxlgd0mAB5lgBpnA16khdzmAtxnABooQBtnwB4jUpzngBkpQR5nQF8j0Vr
+ pQduoRZ4nRR3k014oQBzpAt8oAh/ogBvqA5trACBmypwqRF1pw+GogCAow+D
+ pQB8phJ/nUNurxh0rRd4rwmHqQd6qDOArwCJqwyDsgCMrgB8ryiFtAB7uQN8
+ sDKBuAWOsBWJqFR8ti2IsiOSswaBuRt6vxCOtgqXsgePrjR9wQCFuw2KuQyB
+ uSeSuACEux6JuR2OvACAxACEvCuSuhOHujSMwQGTtiqfuACRvwGOvRWHuz2T
+ wASPwwmYvwaLvTebuxiWvhmSwBqZwAmNu0aevgiKvkCVviaMvE6bwQycuTid
+ vhylvQyZwB2cwg+QywCawR6fwB+bwyGI0gaewCudxCOjwyOT1ACmwjiX0g+j
+ xTqmxzOd1gCV0i6kyyuoyTah1Sif2h6tzjukzF+pz1uq1Eeg2Uml3U1kaLAB
+ AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAHrSURBVCjPY2BAAC5ubkFB
+ BkzAzggDfKgSUFEmKCmOIsPvktA0aVpbSYQ+FwsjkwpMBsi2m/X7z89v3759
+ +ngg1UqIlZEVponJYcW/rw9unH/04u2bc0vbo+WZWGCahEv/fj+6Yc2SZfv3
+ b5w6+eACHVYWmCazMz+unN44b3ZfV3dnx5yDiaKsUAOZGD2/fL58+PSGg3Gu
+ buEVWyZacLCzw6S8X324fOHqibMxWpKy5okBIjAZoNOt9r47e+HOnafbe/ND
+ DNWkOGAyDKwsCtXPTly4eufqm+fvHy4M1RRggsnJMLI6z9x99Oqtx7cuPP/2
+ ele5LjtCGyObbcHcDfuevHn+5s319RuSpOByrEwcwsqhlcvXHbp38+LxiXP6
+ DeBSTKzWvkrCun5Zq04dO7S6p67ZHibFziiRt6PYUk5YtfbUqSMTGnKyHaFS
+ rMDA3fHr7tqayKDWa0dWVmXHp5lCpRgZ2QI2HTl25NLt+1t3rppRFJ8SrwGX
+ 4g9rmbJo0cpVqxZNaK5OS0nzF4NLMWkHZ1TVN9bXlxXmAo2L0uNgZITaxcjI
+ axAYH5+RATQrPtZHk5udA+Z2cIpQN3Hy8vOwMVLmYGTidoenDSawLAsnJz8L
+ kMUiY4ySpviYoKmKRVAcIyXKyIiLyygi+ADqVqrAkApevwAAAABJRU5ErkJg
+ gg==
diff --git a/backends/platform/maemo/debian/copyright b/backends/platform/maemo/debian/copyright
new file mode 100644
index 0000000000..a90e5a21cc
--- /dev/null
+++ b/backends/platform/maemo/debian/copyright
@@ -0,0 +1,22 @@
+ScummVM was debianized by Bastien Nocera <hadess@hadess.net> the 5th Apr 2002.
+It was adopted by Tore Anderson <tore@linpro.no> the 4th Oct 2002.
+Packaged for the Maemo platform by Tomas Junnoen <tomas@fs-security.com> Oct 2005
+From 0.8.2 to 1.2.1, packaging for Maemo was done by Frantisek Dufka <dufkaf@seznam.cz>
+Since 1.4 packaging for Maemo is done by Tarek Soliman <tarek@bashasoliman.com>
+
+It was downloaded from <http://www.scummvm.org/>.
+
+Upstream Authors: see AUTHORS file of the ScummVM source distribution.
+
+Copyright:
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 2, or (at your option) any
+ later version. In addition, some parts are also licensed under LGPL and
+ BSD licenses. See COPYING.BSD and COPYING.LGPL.
+
+ On Debian GNU/Linux systems, the complete text of the GNU General
+ Public License can be found in `/usr/share/common-licenses/GPL'.
+
+This copyright also applies to the Debian-related build scripts.
diff --git a/backends/platform/maemo/debian/postinst b/backends/platform/maemo/debian/postinst
new file mode 100644
index 0000000000..3925f6c275
--- /dev/null
+++ b/backends/platform/maemo/debian/postinst
@@ -0,0 +1,25 @@
+#! /bin/sh
+
+# This is a workaround for older maemo versions related to the icon.
+# The /usr/share/icons/scummvm.xpm icon is needed for OS2006 (Nokia 770)
+# but if present it overrides nicer icons for newer systems in /usr/share/icons/hicolor.
+# This workaround removes it if the OS isn't old (2006/2007).
+
+if [ "$1" = "configure" ] ; then
+OSVER=$OSSO_VERSION
+[ -z "$OSVER" -a -f /etc/osso_software_version ] && OSVER=`cat /etc/osso_software_version`
+OSVER=`echo $OSVER | cut -d _ -f 2`
+case $OSVER in
+ 2006*|2007*)
+ #nothing to do
+ true
+ ;;
+ *)
+ #ugly trick, until this icon is removed big icon in menu does not show
+ [ -f /usr/share/icons/scummvm.xpm ] && rm /usr/share/icons/scummvm.xpm
+ ;;
+esac
+ [ -x /usr/bin/gtk-update-icon-cache ] && /usr/bin/gtk-update-icon-cache /usr/share/icons/hicolor
+ [ -x /usr/bin/maemo-select-menu-location -a -z "$2" ] && /usr/bin/maemo-select-menu-location scummvm.desktop tana_fi_games
+fi
+exit 0
diff --git a/backends/platform/maemo/debian/rules b/backends/platform/maemo/debian/rules
new file mode 100755
index 0000000000..7613df25b4
--- /dev/null
+++ b/backends/platform/maemo/debian/rules
@@ -0,0 +1,71 @@
+#!/usr/bin/make -f
+
+#include /usr/share/quilt/quilt.make
+
+build: scummvm
+
+scummvm:
+ dh_testdir
+ ./configure --host=maemo
+ $(MAKE)
+
+clean:
+ dh_testdir
+ dh_testroot
+ -$(MAKE) distclean
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_clean
+ dh_installdirs
+# run as fake dbus-service to enable switching back to application from desktop via home key
+ install -m0755 dists/maemo/scummvm.servicewrapper debian/scummvm/usr/games/scummvm
+ install -m0644 dists/maemo/scummvm.servicedesktop debian/scummvm/usr/share/applications/hildon/scummvm.desktop
+ install -m0644 dists/maemo/scummvm.service debian/scummvm/usr/share/dbus-1/services
+# the following commented out lines are the alternative for not running scummvm as a fake service
+# install -m0755 dists/maemo/scummvm.wrapper debian/scummvm/usr/games/scummvm
+# install -m0644 dists/maemo/scummvm.desktop debian/scummvm/usr/share/applications/hildon
+ install -m0644 dists/maemo/scummvm26.png debian/scummvm/usr/share/icons/hicolor/26x26/hildon/scummvm.png
+ install -m0644 dists/maemo/scummvm40.png debian/scummvm/usr/share/icons/hicolor/40x40/hildon/scummvm.png
+ install -m0644 dists/maemo/scummvm48.png debian/scummvm/usr/share/icons/hicolor/48x48/hildon/scummvm.png
+ install -m0644 dists/maemo/scummvm64.png debian/scummvm/usr/share/icons/hicolor/64x64/hildon/scummvm.png
+ install -m0644 icons/scummvm.xpm debian/scummvm/usr/share/icons
+# install -m0644 -d debian/scummvm/usr/lib/scummvm
+# install -m0644 plugins/lib*.so debian/scummvm/usr/lib/scummvm
+##non-optified version
+# install -m0755 scummvm debian/scummvm/usr/games/scummvm.bin
+# install -m0644 -d debian/scummvm/usr/share/scummvm
+# install -m0644 dists/pred.dic debian/scummvm/usr/share/scummvm
+# install -m0644 gui/themes/scummclassic.zip gui/themes/scummmodern.zip debian/scummvm/usr/share/scummvm
+# optified version (save rootfs space on N900), see also configure prefix and datadir paths above
+ install -m0644 -d debian/scummvm/opt/scummvm/bin
+ install -m0755 scummvm debian/scummvm/opt/scummvm/bin
+ install -m0644 -d debian/scummvm/opt/scummvm/share
+ install -m0644 dists/pred.dic debian/scummvm/opt/scummvm/share
+ install -m0644 gui/themes/scummclassic.zip gui/themes/scummmodern.zip debian/scummvm/opt/scummvm/share
+ install -m0644 backends/vkeybd/packs/vkeybd_default.zip debian/scummvm/opt/scummvm/share
+# for optified version we can also add engine datafiles
+ install -m0644 dists/engine-data/drascula.dat dists/engine-data/hugo.dat dists/engine-data/kyra.dat dists/engine-data/lure.dat dists/engine-data/m4.dat dists/engine-data/mads.dat dists/engine-data/queen.tbl dists/engine-data/sky.cpt dists/engine-data/teenagent.dat dists/engine-data/toon.dat debian/scummvm/opt/scummvm/share
+
+ install -m0644 -d debian/scummvm/usr/share/doc/scummvm
+ install -m0644 NEWS README COPYRIGHT debian/scummvm/usr/share/doc/scummvm
+binary: binary-arch
+
+binary-arch: build install
+ dh_testdir
+ dh_testroot
+ dh_installchangelogs NEWS
+ dh_link
+ dh_strip
+ dh_fixperms
+ dh_installdeb
+ dh_shlibdeps
+ dh_gencontrol
+ dh_md5sums
+ dh_builddeb
+
+binary-indep:
+
+.PHONY: build clean binary install binary-arch binary-indep
diff --git a/backends/platform/maemo/debian/scummvm.dirs b/backends/platform/maemo/debian/scummvm.dirs
new file mode 100644
index 0000000000..1a452dfbfc
--- /dev/null
+++ b/backends/platform/maemo/debian/scummvm.dirs
@@ -0,0 +1,8 @@
+usr/games
+usr/share/icons
+usr/share/icons/hicolor/26x26/hildon
+usr/share/icons/hicolor/40x40/hildon
+usr/share/icons/hicolor/48x48/hildon
+usr/share/icons/hicolor/64x64/hildon
+usr/share/applications/hildon
+usr/share/dbus-1/services
diff --git a/backends/platform/maemo/maemo-common.h b/backends/platform/maemo/maemo-common.h
new file mode 100644
index 0000000000..f33aa24278
--- /dev/null
+++ b/backends/platform/maemo/maemo-common.h
@@ -0,0 +1,56 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#if defined(MAEMO)
+
+#ifndef PLATFORM_SDL_MAEMO_COMMON_H
+#define PLATFORM_SDL_MAEMO_COMMON_H
+
+namespace Maemo {
+
+enum ModelType {
+ kModelTypeN800 = 1,
+ kModelTypeN810 = 2,
+ kModelTypeN900 = 4,
+ kModelTypeInvalid = 0
+};
+
+struct Model {
+ const char *hwId;
+ ModelType modelType;
+ const char *hwAlias;
+ bool hwKeyboard;
+};
+
+static const Model models[] = {
+ {"RX-34", kModelTypeN800, "N800", false},
+ {"RX-44", kModelTypeN810, "N810", true},
+ {"RX-48", kModelTypeN810, "N810W", true},
+ {"RX-51", kModelTypeN900, "N900", true},
+ {0, kModelTypeInvalid, 0, true}
+};
+
+} // namespace Maemo
+
+#endif // ifndef PLATFORM_SDL_MAEMO_COMMON_H
+
+#endif // if defined(MAEMO)
diff --git a/backends/platform/maemo/maemo.cpp b/backends/platform/maemo/maemo.cpp
new file mode 100644
index 0000000000..3571039e62
--- /dev/null
+++ b/backends/platform/maemo/maemo.cpp
@@ -0,0 +1,113 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#if defined(MAEMO)
+
+#define FORBIDDEN_SYMBOL_EXCEPTION_getenv
+
+#include "common/scummsys.h"
+#include "common/config-manager.h"
+
+#include "backends/platform/maemo/maemo.h"
+#include "backends/events/maemosdl/maemosdl-events.h"
+#include "common/textconsole.h"
+
+
+#include <SDL/SDL_syswm.h>
+#include <X11/Xutil.h>
+
+namespace Maemo {
+
+OSystem_SDL_Maemo::OSystem_SDL_Maemo()
+ :
+ OSystem_POSIX() {
+}
+
+void OSystem_SDL_Maemo::initBackend() {
+ // Create the events manager
+ if (_eventSource == 0)
+ _eventSource = new MaemoSdlEventSource();
+
+ ConfMan.set("vkeybdpath", DATA_PATH);
+
+ _model = Model(detectModel());
+
+ // Call parent implementation of this method
+ OSystem_POSIX::initBackend();
+}
+
+void OSystem_SDL_Maemo::quit() {
+ delete this;
+}
+
+void OSystem_SDL_Maemo::fatalError() {
+ delete this;
+}
+
+void OSystem_SDL_Maemo::setXWindowName(const char *caption) {
+ SDL_SysWMinfo info;
+ SDL_VERSION(&info.version);
+ if (SDL_GetWMInfo(&info)) {
+ Display *dpy = info.info.x11.display;
+ Window win;
+ win = info.info.x11.fswindow;
+ if (win) XStoreName(dpy, win, caption);
+ win = info.info.x11.wmwindow;
+ if (win) XStoreName(dpy, win, caption);
+ }
+}
+
+void OSystem_SDL_Maemo::setWindowCaption(const char *caption) {
+ Common::String cap;
+ byte c;
+
+ // The string caption is supposed to be in LATIN-1 encoding.
+ // SDL expects UTF-8. So we perform the conversion here.
+ while ((c = *(const byte *)caption++)) {
+ if (c < 0x80)
+ cap += c;
+ else {
+ cap += 0xC0 | (c >> 6);
+ cap += 0x80 | (c & 0x3F);
+ }
+ }
+
+ SDL_WM_SetCaption(cap.c_str(), cap.c_str());
+
+ Common::String cap2("ScummVM - "); // 2 lines in OS2008 task switcher, set first line
+ cap = cap2 + cap;
+ setXWindowName(cap.c_str());
+}
+
+const Maemo::Model OSystem_SDL_Maemo::detectModel() {
+ Common::String deviceHwId = Common::String(getenv("SCUMMVM_MAEMO_DEVICE"));
+ const Model *model;
+ for (model = models; model->hwId; model++) {
+ if (deviceHwId.equals(model->hwId))
+ return *model;
+ }
+ return *model;
+}
+
+} //namespace Maemo
+
+#endif
diff --git a/backends/platform/maemo/maemo.h b/backends/platform/maemo/maemo.h
new file mode 100644
index 0000000000..e42936ddf0
--- /dev/null
+++ b/backends/platform/maemo/maemo.h
@@ -0,0 +1,56 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#if defined(MAEMO)
+
+#ifndef PLATFORM_SDL_MAEMO_H
+#define PLATFORM_SDL_MAEMO_H
+
+#include "backends/platform/sdl/posix/posix.h"
+#include "backends/platform/maemo/maemo-common.h"
+
+namespace Maemo {
+
+class OSystem_SDL_Maemo : public OSystem_POSIX {
+public:
+ OSystem_SDL_Maemo();
+
+ virtual void initBackend();
+ virtual void quit();
+ virtual void fatalError();
+ virtual void setWindowCaption(const char *caption);
+
+ Model getModel() { return _model; }
+
+private:
+ virtual void setXWindowName(const char *caption);
+
+ const Model detectModel();
+ Model _model;
+
+};
+
+} // namespace Maemo
+
+#endif // ifndef PLATFORM_SDL_MAEMO_H
+
+#endif // if defined(MAEMO)
diff --git a/backends/platform/maemo/main.cpp b/backends/platform/maemo/main.cpp
new file mode 100644
index 0000000000..7e8a316eb5
--- /dev/null
+++ b/backends/platform/maemo/main.cpp
@@ -0,0 +1,52 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#if defined(MAEMO)
+
+#define FORBIDDEN_SYMBOL_EXCEPTION_unistd_h
+
+#include "backends/platform/maemo/maemo.h"
+#include "backends/plugins/sdl/sdl-provider.h"
+#include "base/main.h"
+
+#include <unistd.h>
+
+int main(int argc, char* argv[]) {
+ g_system = new Maemo::OSystem_SDL_Maemo();
+ assert(g_system);
+
+ ((Maemo::OSystem_SDL_Maemo *)g_system)->init();
+
+#ifdef DYNAMIC_MODULES
+ PluginManager::instance().addPluginProvider(new SDLPluginProvider());
+#endif
+
+ // Invoke the actual ScummVM main entry point:
+ int res = scummvm_main(argc, argv);
+
+ // Free OSystem
+ delete (Maemo::OSystem_SDL_Maemo *)g_system;
+
+ return res;
+}
+
+#endif
diff --git a/backends/platform/maemo/module.mk b/backends/platform/maemo/module.mk
new file mode 100644
index 0000000000..47f6b56ad0
--- /dev/null
+++ b/backends/platform/maemo/module.mk
@@ -0,0 +1,13 @@
+MODULE := backends/platform/maemo
+
+MODULE_OBJS := \
+ main.o \
+ maemo.o
+
+# We don't use rules.mk but rather manually update OBJS and MODULE_DIRS.
+MODULE_OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS))
+OBJS := $(MODULE_OBJS) $(OBJS)
+MODULE_DIRS += $(sort $(dir $(MODULE_OBJS)))
+
+# Hack to ensure the SDL backend is built so we can use OSystem_SDL.
+-include $(srcdir)/backends/platform/sdl/module.mk
diff --git a/backends/platform/maemo/scummvm-1.1.0-maemo.patch b/backends/platform/maemo/scummvm-1.1.0-maemo.patch
deleted file mode 100644
index 49b14120b5..0000000000
--- a/backends/platform/maemo/scummvm-1.1.0-maemo.patch
+++ /dev/null
@@ -1,1371 +0,0 @@
-diff -Naur scummvm-1.1.orig/debian/changelog scummvm-1.1/debian/changelog
---- scummvm-1.1.orig/debian/changelog 1970-01-01 01:00:00.000000000 +0100
-+++ scummvm-1.1/debian/changelog 2010-03-24 15:40:44.000000000 +0100
-@@ -0,0 +1,211 @@
-+scummvm (1.1.0~pre) unstable; urgency=low
-+
-+ * 1.1.0 testing release
-+ * cleanup for N900 (new firmwares need less hacks)
-+ * unified binary for all devices now have datafiles included (~2MB)
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 24 Mar 2010 01:48:05 +0100
-+scummvm (1.0.0-4) unstable; urgency=low
-+
-+ * datadir optified (/usr/share/scummvm -> /opt/scummvm/share)
-+ * added engine files to datadir
-+ * Application Manager icon enlarged to 48x48
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Thu, 17 Dec 2009 13:54:51 +0100
-+scummvm (1.0.0-3) unstable; urgency=low
-+
-+ * disable taskmanager topleft button in fullscreen mode (N900)
-+ * map shift+click to right button click
-+ * mam ctrl+click to mouse move (no click)
-+ * set fullscreen window as _HILDON_NON_COMPOSITED_WINDOW (N900)
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Tue, 15 Dec 2009 23:12:51 +0100
-+scummvm (1.0.0-2) unstable; urgency=low
-+
-+ * grab N900 volume keys
-+ * map Shift+Backspace to Escape key, shift+enter to Menu key (N900)
-+ * optified = main binary moved to /opt/scummvm/bin/scummvm
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Sat, 12 Dec 2009 23:39:04 +0100
-+scummvm (1.0.0-1) unstable; urgency=low
-+
-+ * -mcpu=arm1136j-s -mfpu=vfp -mfloat-abi=softfp breaks Gobliins, reverted
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 2 Dec 2009 10:25:11 +0100
-+scummvm (1.0.0) unstable; urgency=low
-+
-+ * upstream 1.0 release
-+ * Initial support for N900
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Fri, 6 Nov 2009 22:02:25 +0100
-+scummvm (1.0.0~rc1-3) unstable; urgency=low
-+
-+ * updated to 1.0 branch revision 43999 to fix bugs (Cruise pause, ..)
-+ * Cruise for Corpse mapping added to zoom+ for N800/770
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 7 Sep 2009 09:03:13 +0200
-+scummvm (1.0.0~rc1-2) unstable; urgency=low
-+
-+ * Cruise for Corpse key bindings added
-+ - menu key for menu, zoom-=right click, zoom+=context menu
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 2 Sep 2009 23:03:59 +0200
-+scummvm (1.0.0~rc1-1) unstable; urgency=low
-+
-+ * Discworld key bindings added - menu key for menu, zoom-=right click, zoom+=Enter/y key
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 2 Sep 2009 09:53:08 +0200
-+scummvm (1.0.0~rc1) unstable; urgency=low
-+
-+ * upstream 1.0.0rc1 release
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Thu, 20 Aug 2009 23:33:59 +0200
-+scummvm (0.13.1) unstable; urgency=low
-+
-+ * upstream 0.13.1 release
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Sat, 18 Apr 2009 22:40:42 +0200
-+scummvm (0.13.0-2) unstable; urgency=low
-+
-+ * dbus_service.patch is incomplete - needs also install line in debian/rules
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Fri, 27 Feb 2009 20:37:29 +0100
-+scummvm (0.13.0-1) unstable; urgency=low
-+
-+ * fix crash in task switcher caption code when .scummvmrc had fullscreen value set
-+ * enabled also dbus_service.patch for home key switching back (not needed in OS < 2008)
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Fri, 27 Feb 2009 09:29:01 +0100
-+scummvm (0.13.0) unstable; urgency=low
-+
-+ * upstream 0.13.0 release
-+ * Feeble Files mapping
-+ * task switcher item name patch from mikkov
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 18 Feb 2009 21:52:33 +0100
-+scummvm (0.11.99-4) unstable; urgency=low
-+
-+ * Maemo extras-devel test version
-+ - maemo-taskswitcher.patch: title shown right from the beginning
-+ and title not fixed to "ScummVM" only
-+ - dbus_service.patch: modify scummvm.desktop, scummvm.wrapper and
-+ scummvm.service to make switching application automatically back
-+ via second home key long press to work
-+
-+ -- Mikko Vartiainen <mvartiainen@gmail.com> Thu, 03 Jan 2009 01:59:52 +0200
-+scummvm (0.11.99-3) unstable; urgency=low
-+
-+ * Maemo extras-devel test version
-+ - maemo-taskswitcher.patch
-+
-+ -- Mikko Vartiainen <mvartiainen@gmail.com> Thu, 01 Jan 2009 13:13:13 +0200
-+scummvm (0.11.99-2) unstable; urgency=low
-+
-+ * Maemo extras-devel test version
-+ - keeping version below 0.12.0
-+ - not in user/ category
-+
-+ -- Mikko Vartiainen <mvartiainen@gmail.com> Thu, 01 Jan 2009 02:04:14 +0200
-+scummvm (0.12.0) unstable; urgency=low
-+
-+ * upstream 0.12.0 release
-+ * update description
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 25 Aug 2008 21:47:41 +0200
-+scummvm (0.11.99) unstable; urgency=low
-+
-+ * upstream 0.12.0 testing pre-release
-+ * big icons added for OS2008 menu
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Fri, 22 Aug 2008 08:20:48 +0200
-+scummvm (0.11.1) unstable; urgency=low
-+
-+ * upstream 0.11.1 release
-+ * mapping for N810: zoom+ = menu for all games (except FW)
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Sat, 23 Feb 2008 20:41:37 +0100
-+scummvm (0.11.0-2) unstable; urgency=low
-+
-+ * mapping for N800/770: zoom+ = y, zoom- = 1 (all games except FW)
-+ this fixes save dialog in BS1 and also allows to exit some games via 'y'
-+ * mapping for N810: zoom- = rightclick for all games
-+ * updated to revision 30849 from 0.11 branch (some bugfixes for 0.11.1)
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 11 Feb 2008 22:22:48 +0100
-+scummvm (0.11.0-1) unstable; urgency=low
-+
-+ * theme files added back
-+ * SWORD2,SAGA - added zoom keys =1/2 for saved games
-+ * different mapping for N810 rightclick=zoom-,menu=zoom+ (currently only in LURE)
-+ * added NEWS README COPYRIGHT do doc dir as per scummvm project guidelines
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Sun, 13 Jan 2008 22:58:41 +0100
-+scummvm (0.11.0-0) unstable; urgency=low
-+
-+ * upstream 0.11 release
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Sat, 12 Jan 2008 22:26:34 +0100
-+scummvm (0.10.0-5) unstable; urgency=low
-+
-+ * fixed for chinook, menu selection postinst script added
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Thu, 25 Oct 2007 09:56:32 +0200
-+scummvm (0.10.0-4) unstable; urgency=low
-+
-+ * AGI - added pred.dic to DATA_PATH (=/usr/share/scummvm) to enable
-+ predictive input
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Tue, 28 Aug 2007 09:58:29 +0200
-+scummvm (0.10.0-3) unstable; urgency=low
-+
-+ * SCUMM - added mapping also for key up events (may fix right button in FT?)
-+ * SWORD2 - added right button press mapping (not tested)
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 20 Aug 2007 22:39:07 +0200
-+scummvm (0.10.0-2) unstable; urgency=low
-+
-+ * Future Wars - add mapping for left/up/down/right,zoom +/-
-+ * fix SDL backend to set mouse position on button down event
-+ as we may not have mousemove events with touchscreen
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Fri, 13 Jul 2007 09:56:37 +0200
-+scummvm (0.10.0-1) unstable; urgency=low
-+
-+ * mapped F10 in Future Wars to menu key
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 11 Jul 2007 22:20:00 +0200
-+scummvm (0.10.0) unstable; urgency=low
-+
-+ * upstream 0.10 release, enabled FLAC too
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 4 Jul 2007 12:48:48 +0200
-+scummvm (0.9.1-1) unstable; urgency=low
-+
-+ * 0.9.1 mapped right mouse button in sword1
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 18 Jun 2007 21:15:31 +0200
-+scummvm (0.9.1) unstable; urgency=low
-+
-+ * 0.9.1 upstream release
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Wed, 1 Nov 2006 20:40:51 +0100
-+scummvm (0.9.0-3) unstable; urgency=low
-+
-+ * merged fixes in 0.9.0 upstream branch
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Mon, 9 Oct 2006 15:40:59 +0200
-+scummvm (0.9.0-2) unstable; urgency=low
-+
-+ * merged fixes in 0.9.0 upstream branch
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Sat, 12 Aug 2006 20:10:47 +0200
-+scummvm (0.9.0-1) unstable; urgency=low
-+
-+ * merged changes in 0.9.0 upstream release
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Sun, 23 Jul 2006 22:29:51 +0200
-+scummvm (0.9.0) unstable; urgency=low
-+
-+ * 0.9.0 upstream release
-+
-+ -- Frantisek Dufka <dufkaf@seznam.cz> Tue, 27 Jun 2006 20:30:54 +0200
-diff -Naur scummvm-1.1.orig/debian/compat scummvm-1.1/debian/compat
---- scummvm-1.1.orig/debian/compat 1970-01-01 01:00:00.000000000 +0100
-+++ scummvm-1.1/debian/compat 2010-03-24 00:14:36.000000000 +0100
-@@ -0,0 +1 @@
-+4
-diff -Naur scummvm-1.1.orig/debian/control scummvm-1.1/debian/control
---- scummvm-1.1.orig/debian/control 1970-01-01 01:00:00.000000000 +0100
-+++ scummvm-1.1/debian/control 2010-03-24 00:14:36.000000000 +0100
-@@ -0,0 +1,51 @@
-+Source: scummvm
-+Section: user/games
-+Priority: optional
-+Maintainer: Frantisek Dufka <dufkaf@seznam.cz>
-+Build-Depends: debhelper (>> 4.0.0), libsdl1.2-dev, libmad0-dev, libasound2-dev, libvorbisidec-dev, libmpeg2-4-dev, libflac-dev (>= 1.1.2), libz-dev, quilt
-+
-+Standards-Version: 3.6.1.1
-+Package: scummvm
-+Depends: ${shlibs:Depends}
-+Architecture: i386 armel
-+Section: user/games
-+Description: interpreter that will play graphic adventure games
-+ written for LucasArts' SCUMM virtual machine, Sierra's AGI adventures,
-+ Adventure Soft's Simon the Sorcerer 1, 2 and Feeble Files,
-+ Revolution Software's Beneath a Steel Sky and Broken Sword 1 and 2,
-+ Interactive Binary Illusions' Flight of the Amazon Queen,
-+ Coktel Vision's Gobliiins, Wyrmkeep's Inherit the Earth,
-+ Westwood's Legend of Kyrandia, and various others.
-+ This package does not contain any actual games.
-+XBS-Maemo-Icon-26:
-+ iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAC/VBMVEUICwcH
-+ CQUKDAgLDQoMDwsOEAwREAUPEQ0QEg8PFQoRExAUEwoVFAwPGAcTFBIRFg0W
-+ FQ0XFg4RGgkTGA8XGQsTGwwUHA0aGRIWGxMXHQkVHQ8aGhMbGxQcHQocGxUZ
-+ HwsYIgcfHxgeIRUbJQwhIBofJAweJwgfKQocKwwgKgshKw0gLggfLg8jLQ8n
-+ LwwpLhEmMwcoMRQjNgotLCYmNwQlNwwqOBQtOQgsOQ8xNh4sPQswNyQqQAUw
-+ PAsuOiAsQgcwOyIqRgIsSAQvRgs0PyY1Rg06RA0+PDAwSwg2RxUzTQE4TQsz
-+ VAc/SSo6VAk4VwE6VRM2XAVAUC85XwlJVCNEXQo+YwJGXwxMWS1JXC5AagBI
-+ awJUagRIcQBSbwpHeAJTaD9OdwNXcwJKewZNfABacRlOfQBPfgBQfwBMggBW
-+ fgBNgwNSgQJOhAVecUJjdSZefwNUiABZhgBjeDZieDxhezFQjQBgghZkhQ5j
-+ iQJUkAZcixJmgDZnhCtckQpblgBekw5clwBqgkthlQBdmAJriz90hz5omgBs
-+ mAhxlgd0mAB5lgBpnA16khdzmAtxnABooQBtnwB4jUpzngBkpQR5nQF8j0Vr
-+ pQduoRZ4nRR3k014oQBzpAt8oAh/ogBvqA5trACBmypwqRF1pw+GogCAow+D
-+ pQB8phJ/nUNurxh0rRd4rwmHqQd6qDOArwCJqwyDsgCMrgB8ryiFtAB7uQN8
-+ sDKBuAWOsBWJqFR8ti2IsiOSswaBuRt6vxCOtgqXsgePrjR9wQCFuw2KuQyB
-+ uSeSuACEux6JuR2OvACAxACEvCuSuhOHujSMwQGTtiqfuACRvwGOvRWHuz2T
-+ wASPwwmYvwaLvTebuxiWvhmSwBqZwAmNu0aevgiKvkCVviaMvE6bwQycuTid
-+ vhylvQyZwB2cwg+QywCawR6fwB+bwyGI0gaewCudxCOjwyOT1ACmwjiX0g+j
-+ xTqmxzOd1gCV0i6kyyuoyTah1Sif2h6tzjukzF+pz1uq1Eeg2Uml3U1kaLAB
-+ AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAHrSURBVCjPY2BAAC5ubkFB
-+ BkzAzggDfKgSUFEmKCmOIsPvktA0aVpbSYQ+FwsjkwpMBsi2m/X7z89v3759
-+ +ngg1UqIlZEVponJYcW/rw9unH/04u2bc0vbo+WZWGCahEv/fj+6Yc2SZfv3
-+ b5w6+eACHVYWmCazMz+unN44b3ZfV3dnx5yDiaKsUAOZGD2/fL58+PSGg3Gu
-+ buEVWyZacLCzw6S8X324fOHqibMxWpKy5okBIjAZoNOt9r47e+HOnafbe/ND
-+ DNWkOGAyDKwsCtXPTly4eufqm+fvHy4M1RRggsnJMLI6z9x99Oqtx7cuPP/2
-+ ele5LjtCGyObbcHcDfuevHn+5s319RuSpOByrEwcwsqhlcvXHbp38+LxiXP6
-+ DeBSTKzWvkrCun5Zq04dO7S6p67ZHibFziiRt6PYUk5YtfbUqSMTGnKyHaFS
-+ rMDA3fHr7tqayKDWa0dWVmXHp5lCpRgZ2QI2HTl25NLt+1t3rppRFJ8SrwGX
-+ 4g9rmbJo0cpVqxZNaK5OS0nzF4NLMWkHZ1TVN9bXlxXmAo2L0uNgZITaxcjI
-+ axAYH5+RATQrPtZHk5udA+Z2cIpQN3Hy8vOwMVLmYGTidoenDSawLAsnJz8L
-+ kMUiY4ySpviYoKmKRVAcIyXKyIiLyygi+ADqVqrAkApevwAAAABJRU5ErkJg
-+ gg==
-diff -Naur scummvm-1.1.orig/debian/copyright scummvm-1.1/debian/copyright
---- scummvm-1.1.orig/debian/copyright 1970-01-01 01:00:00.000000000 +0100
-+++ scummvm-1.1/debian/copyright 2010-03-24 00:14:36.000000000 +0100
-@@ -0,0 +1,20 @@
-+ScummVM was debianized by Bastien Nocera <hadess@hadess.net> the 5th Apr 2002.
-+It was adopted by Tore Anderson <tore@linpro.no> the 4th Oct 2002.
-+Packaged for the Maemo platform by Tomas Junnoen <tomas@fs-security.com> Oct 2005
-+Since 0.8.2 packaging for Maemo done by Frantisek Dufka <dufkaf@seznam.cz>
-+
-+It was downloaded from <http://www.scummvm.org/>.
-+
-+Upstream Authors: see AUTHORS file of the ScummVM source distribution.
-+
-+Copyright:
-+
-+ This program is free software; you can redistribute it and/or modify it
-+ under the terms of the GNU General Public License as published by the
-+ Free Software Foundation; either version 2, or (at your option) any
-+ later version.
-+
-+ On Debian GNU/Linux systems, the complete text of the GNU General
-+ Public License can be found in `/usr/share/common-licenses/GPL'.
-+
-+This copyright also applies to the Debian-related build scripts.
-diff -Naur scummvm-1.1.orig/debian/postinst scummvm-1.1/debian/postinst
---- scummvm-1.1.orig/debian/postinst 1970-01-01 01:00:00.000000000 +0100
-+++ scummvm-1.1/debian/postinst 2010-03-24 00:14:36.000000000 +0100
-@@ -0,0 +1,19 @@
-+#! /bin/sh
-+if [ "$1" = "configure" ] ; then
-+OSVER=$OSSO_VERSION
-+[ -z "$OSVER" -a -f /etc/osso_software_version ] && OSVER=`cat /etc/osso_software_version`
-+OSVER=`echo $OSVER | cut -d _ -f 2`
-+case $OSVER in
-+ 2006*|2007*)
-+ #nothing to do
-+ true
-+ ;;
-+ *)
-+ #ugly trick, until this icon is removed big icon in menu does not show
-+ [ -f /usr/share/icons/scummvm.xpm ] && rm /usr/share/icons/scummvm.xpm
-+ ;;
-+esac
-+ [ -x /usr/bin/gtk-update-icon-cache ] && /usr/bin/gtk-update-icon-cache /usr/share/icons/hicolor
-+ [ -x /usr/bin/maemo-select-menu-location -a -z "$2" ] && /usr/bin/maemo-select-menu-location scummvm.desktop tana_fi_games
-+fi
-+exit 0
-diff -Naur scummvm-1.1.orig/debian/rules scummvm-1.1/debian/rules
---- scummvm-1.1.orig/debian/rules 1970-01-01 01:00:00.000000000 +0100
-+++ scummvm-1.1/debian/rules 2010-03-24 13:39:46.000000000 +0100
-@@ -0,0 +1,72 @@
-+#!/usr/bin/make -f
-+
-+#include /usr/share/quilt/quilt.make
-+
-+build: scummvm
-+
-+scummvm:
-+ dh_testdir
-+ CXXFLAGS="-Os -mcpu=arm926ej-s -fomit-frame-pointer -DMAEMO_SDL -I/usr/X11R6/include" ./configure --prefix=/usr --disable-debug --disable-mt32emu --disable-hq-scalers --with-tremor-prefix=/usr --enable-tremor --with-zlib-prefix=/usr --enable-zlib --with-mad-prefix=/usr --enable-mad --enable-flac --disable-alsa --prefix=/opt/scummvm --datadir=/opt/scummvm/share
-+## --host=arm-linux --enable-plugins --disable-scumm-7-8
-+ $(MAKE)
-+
-+clean:
-+ dh_testdir
-+ dh_testroot
-+ -$(MAKE) distclean
-+ dh_clean
-+
-+install: build
-+ dh_testdir
-+ dh_testroot
-+ dh_clean
-+ dh_installdirs
-+# not as a service
-+# install -m0755 dists/maemo/scummvm.wrapper debian/scummvm/usr/games/scummvm
-+# install -m0644 dists/maemo/scummvm.desktop debian/scummvm/usr/share/applications/hildon
-+# run as fake dbus-service to enable switching back to application from desktop via home key
-+ install -m0755 dists/maemo/scummvm.servicewrapper debian/scummvm/usr/games/scummvm
-+ install -m0644 dists/maemo/scummvm.servicedesktop debian/scummvm/usr/share/applications/hildon/scummvm.desktop
-+ install -m0644 dists/maemo/scummvm.service debian/scummvm/usr/share/dbus-1/services
-+# end of fake dbus service
-+ install -m0644 dists/maemo/scummvm26.png debian/scummvm/usr/share/icons/hicolor/26x26/hildon/scummvm.png
-+ install -m0644 dists/maemo/scummvm40.png debian/scummvm/usr/share/icons/hicolor/40x40/hildon/scummvm.png
-+ install -m0644 dists/maemo/scummvm48.png debian/scummvm/usr/share/icons/hicolor/48x48/hildon/scummvm.png
-+ install -m0644 dists/maemo/scummvm64.png debian/scummvm/usr/share/icons/hicolor/64x64/hildon/scummvm.png
-+ install -m0644 icons/scummvm.xpm debian/scummvm/usr/share/icons
-+# install -m0644 -d debian/scummvm/usr/lib/scummvm
-+# install -m0644 plugins/lib*.so debian/scummvm/usr/lib/scummvm
-+##non-optified version
-+# install -m0755 scummvm debian/scummvm/usr/games/scummvm.bin
-+# install -m0644 -d debian/scummvm/usr/share/scummvm
-+# install -m0644 dists/pred.dic debian/scummvm/usr/share/scummvm
-+# install -m0644 gui/themes/scummclassic.zip gui/themes/scummmodern.zip debian/scummvm/usr/share/scummvm
-+# optified version (save rootfs space on N900), see also configure prefix and datadir paths above
-+ install -m0644 -d debian/scummvm/opt/scummvm/bin
-+ install -m0755 scummvm debian/scummvm/opt/scummvm/bin
-+ install -m0644 -d debian/scummvm/opt/scummvm/share
-+ install -m0644 dists/pred.dic debian/scummvm/opt/scummvm/share
-+ install -m0644 gui/themes/scummclassic.zip gui/themes/scummmodern.zip debian/scummvm/opt/scummvm/share
-+# for optified version we can also add engine datafiles
-+ install -m0644 dists/engine-data/drascula.dat dists/engine-data/kyra.dat dists/engine-data/lure.dat dists/engine-data/queen.tbl dists/engine-data/sky.cpt dists/engine-data/teenagent.dat debian/scummvm/opt/scummvm/share
-+
-+ install -m0644 -d debian/scummvm/usr/share/doc/scummvm
-+ install -m0644 NEWS README COPYRIGHT debian/scummvm/usr/share/doc/scummvm
-+binary: binary-arch
-+
-+binary-arch: build install
-+ dh_testdir
-+ dh_testroot
-+ dh_installchangelogs NEWS
-+ dh_link
-+ dh_strip
-+ dh_fixperms
-+ dh_installdeb
-+ dh_shlibdeps
-+ dh_gencontrol
-+ dh_md5sums
-+ dh_builddeb
-+
-+binary-indep:
-+
-+.PHONY: build clean binary install binary-arch binary-indep
-diff -Naur scummvm-1.1.orig/debian/scummvm.dirs scummvm-1.1/debian/scummvm.dirs
---- scummvm-1.1.orig/debian/scummvm.dirs 1970-01-01 01:00:00.000000000 +0100
-+++ scummvm-1.1/debian/scummvm.dirs 2010-03-24 00:14:36.000000000 +0100
-@@ -0,0 +1,8 @@
-+usr/games
-+usr/share/icons
-+usr/share/icons/hicolor/26x26/hildon
-+usr/share/icons/hicolor/40x40/hildon
-+usr/share/icons/hicolor/48x48/hildon
-+usr/share/icons/hicolor/64x64/hildon
-+usr/share/applications/hildon
-+usr/share/dbus-1/services
-\ No newline at end of file
---- scummvm-1.1.orig/configure 2010-03-24 21:25:00.000000000 +0100
-+++ scummvm-1.1/configure 2010-03-24 21:24:28.000000000 +0100
-@@ -1355,6 +1355,9 @@
- _need_memalign=yes
- add_line_to_config_mk 'USE_ARM_SOUND_ASM = 1'
- add_line_to_config_mk 'USE_ARM_SMUSH_ASM = 1'
-+ add_line_to_config_mk 'USE_ARM_GFX_ASM = 1'
-+ add_line_to_config_mk 'ARM_USE_GFX_ASM = 1'
-+ add_line_to_config_mk 'USE_ARM_COSTUME_ASM = 1'
- ;;
- arm-riscos|linupy)
- DEFINES="$DEFINES -DUNIX -DLINUPY"
-@@ -2205,11 +2208,11 @@
- #
- test -z "$_bindir" && _bindir="$_prefix/bin"
- test -z "$_mandir" && _mandir="$_prefix/share/man"
--test -z "$_datadir" && _datadir="$_prefix/share"
--test -z "$_libdir" && _libdir="$_prefix/lib"
-+test -z "$_datadir" && _datadir="$_prefix/share/scummvm"
-+test -z "$_libdir" && _libdir="$_prefix/lib/scummvm"
-
--DEFINES="$DEFINES -DDATA_PATH=\\\"$_datadir/scummvm\\\""
--DEFINES="$DEFINES -DPLUGIN_DIRECTORY=\\\"$_libdir/scummvm\\\""
-+DEFINES="$DEFINES -DDATA_PATH=\\\"$_datadir\\\""
-+DEFINES="$DEFINES -DPLUGIN_DIRECTORY=\\\"$_libdir\\\""
-
-
- echo_n "Backend... "
---- scummvm-1.1.orig/engines/kyra/module.mk 2010-03-21 22:01:04.000000000 +0100
-+++ scummvm-1.1/engines/kyra/module.mk 2010-03-24 00:14:36.000000000 +0100
-@@ -95,3 +95,9 @@
-
- # Include common rules
- include $(srcdir)/rules.mk
-+
-+#ugly workaround, screen.cpp crashes gcc version 3.4.4 (CodeSourcery ARM 2005q3-2) with anything but -O3
-+$(MODULE)/screen.o: $(MODULE)/screen.cpp
-+ $(MKDIR) $(*D)/$(DEPDIR)
-+ $(CXX) -Wp,-MMD,"$(*D)/$(DEPDIR)/$(*F).d",-MQ,"$@",-MP $(CXXFLAGS) -O3 $(CPPFLAGS) -c $(<) -o $*.o
-+
---- scummvm-1.1.orig/engines/gob/util.cpp 2010-03-21 22:01:08.000000000 +0100
-+++ scummvm-1.1/engines/gob/util.cpp 2010-03-24 00:17:52.000000000 +0100
-@@ -114,6 +114,10 @@
- _mouseButtons = (MouseButtons) (((uint32) _mouseButtons) & ~((uint32) kMouseButtonsRight));
- break;
- case Common::EVENT_KEYDOWN:
-+#ifdef MAEMO_SDL
-+ if (event.kbd.keycode==Common::KEYCODE_F4)
-+ _mouseButtons = (MouseButtons) (((uint32) _mouseButtons) | ((uint32) kMouseButtonsRight));
-+#endif
- if (event.kbd.hasFlags(Common::KBD_CTRL)) {
- if (event.kbd.keycode == Common::KEYCODE_f)
- _fastMode ^= 1;
-@@ -126,6 +130,10 @@
- addKeyToBuffer(event.kbd);
- break;
- case Common::EVENT_KEYUP:
-+#ifdef MAEMO_SDL
-+ if (event.kbd.keycode==Common::KEYCODE_F4)
-+ _mouseButtons = (MouseButtons) (((uint32) _mouseButtons) & ~((uint32) kMouseButtonsRight));
-+#endif
- break;
- default:
- break;
---- scummvm-1.1.orig/engines/queen/input.cpp 2010-03-21 22:01:14.000000000 +0100
-+++ scummvm-1.1/engines/queen/input.cpp 2010-03-24 00:14:36.000000000 +0100
-@@ -176,7 +176,11 @@
- }
- break;
- case Common::KEYCODE_F1: // use Journal
-+#ifdef MAEMO_SDL
-+ case Common::KEYCODE_F4: // menu key on N770
-+#else
- case Common::KEYCODE_F5:
-+#endif
- if (_cutawayRunning) {
- if (_canQuit) {
- _keyVerb = VERB_USE_JOURNAL;
---- scummvm-1.1.orig/engines/sword1/sword1.cpp 2010-03-21 22:01:22.000000000 +0100
-+++ scummvm-1.1/engines/sword1/sword1.cpp 2010-03-24 00:14:36.000000000 +0100
-@@ -697,8 +697,21 @@
- while (_eventMan->pollEvent(event)) {
- switch (event.type) {
- case Common::EVENT_KEYDOWN:
-+#ifdef MAEMO_SDL
-+// map center to right button
-+ if (event.kbd.keycode == 13) {
-+ _mouseState |= BS1R_BUTTON_DOWN;
-+ } else
-+#endif
- _keyPressed = event.kbd;
- break;
-+#ifdef MAEMO_SDL
-+ case Common::EVENT_KEYUP:
-+ if (event.kbd.keycode == 13) {
-+ _mouseState |= BS1R_BUTTON_UP;
-+ }
-+ break;
-+#endif
- case Common::EVENT_MOUSEMOVE:
- _mouseCoord = event.mouse;
- break;
---- scummvm-1.1.orig/engines/sword2/sword2.cpp 2010-03-21 22:01:23.000000000 +0100
-+++ scummvm-1.1/engines/sword2/sword2.cpp 2010-03-24 00:14:36.000000000 +0100
-@@ -662,11 +662,27 @@
- _gameSpeed = 1;
- }
- }
-+#ifdef MAEMO_SDL
-+// map center to right button
-+ else if (event.kbd.keycode == 13 && !(_inputEventFilter & RD_RIGHTBUTTONDOWN)) {
-+ _mouseEvent.pending = true;
-+ _mouseEvent.buttons = RD_RIGHTBUTTONDOWN;
-+ } else
-+#endif
- if (!(_inputEventFilter & RD_KEYDOWN)) {
- _keyboardEvent.pending = true;
- _keyboardEvent.kbd = event.kbd;
- }
- break;
-+#ifdef MAEMO_SDL
-+ case Common::EVENT_KEYUP:
-+// map center to right button
-+ if (event.kbd.keycode == 13 && !(_inputEventFilter & RD_RIGHTBUTTONUP)) {
-+ _mouseEvent.pending = true;
-+ _mouseEvent.buttons = RD_RIGHTBUTTONUP;
-+ }
-+ break;
-+#endif
- case Common::EVENT_LBUTTONDOWN:
- if (!(_inputEventFilter & RD_LEFTBUTTONDOWN)) {
- _mouseEvent.pending = true;
---- scummvm-1.1.orig/engines/scumm/input.cpp 2010-03-21 22:01:31.000000000 +0100
-+++ scummvm-1.1/engines/scumm/input.cpp 2010-03-24 00:19:14.000000000 +0100
-@@ -135,7 +135,20 @@
- // Normal key press, pass on to the game.
- _keyPressed = event.kbd;
- }
--
-+#ifdef MAEMO_SDL
-+ switch (_keyPressed.keycode) {
-+ case Common::KEYCODE_F8: _fastMode ^= 1; break ;// Map F8 (zoom out) to toggle fast mode
-+ case Common::KEYCODE_F4: _keyPressed.keycode = Common::KEYCODE_F5; _keyPressed.ascii=Common::ASCII_F5 ; break; // map F4 to F5 (menu key)
-+ case Common::KEYCODE_RETURN: _keyPressed.keycode = Common::KEYCODE_TAB; _keyPressed.ascii=Common::ASCII_TAB ; break; // map Select (return) to Tab (right mouse button)
-+ default: ;
-+ }
-+ if (_game.version < 7) switch(event.kbd.keycode){
-+ case Common::KEYCODE_UP: _keyPressed.ascii = ' '; _keyPressed.keycode=Common::KEYCODE_SPACE; break ;// map Up to space (pause game)
-+ case Common::KEYCODE_DOWN: _keyPressed.ascii ='.'; _keyPressed.keycode=Common::KEYCODE_PERIOD; break ;// map Down to . (skip one line of dialog)
-+ default: ;
-+ }
-+#endif
-+
- // FIXME: We are using ASCII values to index the _keyDownMap here,
- // yet later one code which checks _keyDownMap will use KEYCODEs
- // to do so. That is, we are mixing ascii and keycode values here,
-@@ -151,6 +164,20 @@
- break;
-
- case Common::EVENT_KEYUP:
-+#ifdef MAEMO_SDL
-+ // map keyup with similar rules as keydown
-+ switch (event.kbd.keycode) {
-+
-+ case Common::KEYCODE_F4: event.kbd.keycode = Common::KEYCODE_F5; event.kbd.ascii=Common::ASCII_F5 ; break; // map F4 to F5 (menu key)
-+ case Common::KEYCODE_RETURN: event.kbd.keycode = Common::KEYCODE_TAB; event.kbd.ascii=Common::ASCII_TAB ; break; // map Select (return) to Tab (right mouse button)
-+ default: ;
-+ }
-+ if (_game.version < 7) switch(event.kbd.keycode){
-+ case Common::KEYCODE_UP: event.kbd.ascii = ' '; event.kbd.keycode=Common::KEYCODE_SPACE; break ;// map Up to space (pause game)
-+ case Common::KEYCODE_DOWN: event.kbd.ascii ='.'; event.kbd.keycode=Common::KEYCODE_PERIOD; break ;// map Down to . (skip one line of dialog)
-+ default: ;
-+ }
-+#endif
- if (event.kbd.ascii >= 512) {
- debugC(DEBUG_GENERAL, "keyPressed > 512 (%d)", event.kbd.ascii);
- } else {
-@@ -513,9 +540,10 @@
- if (VAR_SAVELOAD_SCRIPT != 0xFF && _currentRoom != 0)
- runScript(VAR(VAR_SAVELOAD_SCRIPT2), 0, 0, 0);
-
-+#ifndef MAEMO_SDL
- } else if (restartKeyEnabled && (lastKeyHit.keycode == Common::KEYCODE_F8 && lastKeyHit.hasFlags(0))) {
- confirmRestartDialog();
--
-+#endif
- } else if (pauseKeyEnabled && (lastKeyHit.keycode == Common::KEYCODE_SPACE && lastKeyHit.hasFlags(0))) {
- pauseGame();
-
---- scummvm-1.1.orig/engines/scumm/dialogs.cpp 2010-03-21 22:01:31.000000000 +0100
-+++ scummvm-1.1/engines/scumm/dialogs.cpp 2010-03-24 00:14:36.000000000 +0100
-@@ -633,7 +633,11 @@
- }
-
- void PauseDialog::handleKeyDown(Common::KeyState state) {
-+#ifdef MAEMO_SDL
-+ if (state.ascii == ' ' || state.keycode == Common::KEYCODE_UP ) // Close pause dialog if space or UP key is pressed
-+#else
- if (state.ascii == ' ') // Close pause dialog if space key is pressed
-+#endif
- close();
- else
- ScummDialog::handleKeyDown(state);
-@@ -695,12 +699,19 @@
- }
-
- void ValueDisplayDialog::handleKeyDown(Common::KeyState state) {
-+#ifdef MAEMO_SDL
-+ if (state.ascii == _incKey || state.ascii == _decKey || state.keycode == 275 || state.keycode == 276) {
-+ if ((state.ascii == _incKey || state.keycode == 275 ) && _value < _max)
-+ _value++;
-+ else if ((state.ascii == _decKey || state.keycode == 276) && _value > _min)
-+ _value--;
-+#else
- if (state.ascii == _incKey || state.ascii == _decKey) {
- if (state.ascii == _incKey && _value < _max)
- _value++;
- else if (state.ascii == _decKey && _value > _min)
- _value--;
--
-+#endif
- setResult(_value);
- _timer = getMillis() + kDisplayDelay;
- draw();
---- scummvm-1.1.orig/engines/touche/touche.cpp 2010-03-21 22:01:32.000000000 +0100
-+++ scummvm-1.1/engines/touche/touche.cpp 2010-03-24 00:25:29.000000000 +0100
-@@ -294,6 +294,13 @@
- while (_eventMan->pollEvent(event)) {
- switch (event.type) {
- case Common::EVENT_KEYDOWN:
-+#ifdef MAEMO_SDL
-+ if (event.kbd.keycode == 13) { // select button simulates righ button toggle
-+ _inp_rightMouseButtonPressed=!_inp_rightMouseButtonPressed;
-+ } else {
-+ _inp_rightMouseButtonPressed = false;
-+ }
-+#endif
- if (!handleKeyEvents) {
- break;
- }
-@@ -304,10 +311,18 @@
- quitGame();
- }
- }
-+#ifdef MAEMO_SDL
-+ } else if (event.kbd.keycode == Common::KEYCODE_F4) {
-+#else
- } else if (event.kbd.keycode == Common::KEYCODE_F5) {
-+#endif
- if (_flagsTable[618] == 0 && !_hideInventoryTexts) {
- handleOptions(0);
- }
-+#ifdef MAEMO_SDL
-+ } else if (event.kbd.keycode == Common::KEYCODE_F8) {
-+ _fastWalkMode = !_fastWalkMode;
-+#endif
- } else if (event.kbd.keycode == Common::KEYCODE_F9) {
- _fastWalkMode = true;
- } else if (event.kbd.keycode == Common::KEYCODE_F10) {
-@@ -332,12 +347,22 @@
- case Common::EVENT_LBUTTONDOWN:
- _inp_leftMouseButtonPressed = true;
- break;
-+#ifdef MAEMO_SDL
-+ case Common::EVENT_LBUTTONUP:
-+ // this is done elsewhere _inp_leftMouseButtonPressed = false;
-+ _inp_rightMouseButtonPressed = false; // simulate rbutton up to close menu
-+ break;
-+ case Common::EVENT_RBUTTONDOWN:
-+ _inp_rightMouseButtonPressed = !_inp_rightMouseButtonPressed;
-+ break;
-+#else
- case Common::EVENT_RBUTTONDOWN:
- _inp_rightMouseButtonPressed = true;
- break;
- case Common::EVENT_RBUTTONUP:
- _inp_rightMouseButtonPressed = false;
- break;
-+#endif
- default:
- break;
- }
---- scummvm-1.1.orig/engines/sky/sky.cpp 2010-03-21 22:01:39.000000000 +0100
-+++ scummvm-1.1/engines/sky/sky.cpp 2010-03-24 00:14:36.000000000 +0100
-@@ -406,6 +406,17 @@
- switch (event.type) {
- case Common::EVENT_KEYDOWN:
- _keyPressed = event.kbd;
-+#ifdef MAEMO_SDL
-+ // Maemo platform keybindings
-+ if (_keyPressed.keycode == Common::KEYCODE_F4) // Map F4 (menu) to F5 (access main menu)
-+ _keyPressed.keycode = Common::KEYCODE_F5;
-+ if (_keyPressed.ascii == 13) // Map Select=Enter to right mouse button
-+ _skyMouse->buttonPressed(1);
-+ if (_keyPressed.keycode == Common::KEYCODE_F8) // Map F8 (zoom out) to toggle fast mode
-+ _fastMode ^= 1;
-+ if (_keyPressed.keycode == Common::KEYCODE_DOWN) // Map Down to . (skip one line of dialog)
-+ _keyPressed.ascii = '.';
-+#endif
- break;
- case Common::EVENT_MOUSEMOVE:
- if (!(_systemVars.systemFlags & SF_MOUSE_LOCKED))
---- scummvm-1.1.orig/engines/lure/menu.cpp 2010-03-21 22:01:40.000000000 +0100
-+++ scummvm-1.1/engines/lure/menu.cpp 2010-03-24 00:14:36.000000000 +0100
-@@ -34,7 +34,7 @@
- #include "lure/events.h"
- #include "lure/lure.h"
-
--#if defined(_WIN32_WCE) || defined(__SYMBIAN32__)
-+#if defined(_WIN32_WCE) || defined(MAEMO_SDL) || defined(__SYMBIAN32__)
- #define LURE_CLICKABLE_MENUS
- #endif
-
---- scummvm-1.1.orig/engines/cine/main_loop.cpp 2010-03-21 22:01:43.000000000 +0100
-+++ scummvm-1.1/engines/cine/main_loop.cpp 2010-03-24 00:14:36.000000000 +0100
-@@ -75,18 +75,27 @@
- mouseRight = 1;
- }
- break;
-+#ifdef MAEMO_SDL
-+ case Common::KEYCODE_UP:
-+#else
- case Common::KEYCODE_F1:
-+#endif
- if (allowPlayerInput) {
- playerCommand = 0; // EXAMINE
- makeCommandLine();
- }
- break;
-+#ifdef MAEMO_SDL
-+ case Common::KEYCODE_DOWN:
-+#else
- case Common::KEYCODE_F2:
-+#endif
- if (allowPlayerInput) {
- playerCommand = 1; // TAKE
- makeCommandLine();
- }
- break;
-+#ifndef MAEMO_SDL
- case Common::KEYCODE_F3:
- if (allowPlayerInput) {
- playerCommand = 2; // INVENTORY
-@@ -99,13 +108,43 @@
- makeCommandLine();
- }
- break;
-+#else
-+//map f3, f4 to f8,f7 = zoom +- keys, when in menu generate keypresses for savegame
-+ case Common::KEYCODE_F8:
-+ if (inMenu)
-+ lastKeyStroke = '1';
-+ else if (allowPlayerInput) {
-+ playerCommand = 2; // INVENTORY
-+ makeCommandLine();
-+ }
-+ break;
-+ case Common::KEYCODE_F7:
-+ if (inMenu)
-+ lastKeyStroke = '2';
-+ else
-+ if (allowPlayerInput) {
-+ playerCommand = 3; // USE
-+ makeCommandLine();
-+ }
-+ break;
-+#endif
-+#ifdef MAEMO_SDL
-+ case Common::KEYCODE_LEFT:
-+// if (event.kbd.flags&Common::KBD_SHIFT)
-+// moveUsingKeyboard(-1, 0); // Left
-+#else
- case Common::KEYCODE_F5:
-+#endif
- if (allowPlayerInput) {
- playerCommand = 4; // ACTIVATE
- makeCommandLine();
- }
- break;
-+#ifdef MAEMO_SDL
-+ case Common::KEYCODE_RIGHT:
-+#else
- case Common::KEYCODE_F6:
-+#endif
- if (allowPlayerInput) {
- playerCommand = 5; // SPEAK
- makeCommandLine();
-@@ -117,7 +156,11 @@
- makeCommandLine();
- }
- break;
-+#ifdef MAEMO_SDL
-+ case Common::KEYCODE_F4: // Menu key
-+#else
- case Common::KEYCODE_F10:
-+#endif
- if (!disableSystemMenu && !inMenu) {
- g_cine->makeSystemMenu();
- }
-@@ -133,19 +176,19 @@
- case Common::KEYCODE_KP_PLUS:
- g_cine->modifyGameSpeed(+1); // Faster
- break;
-- case Common::KEYCODE_LEFT:
-+// case Common::KEYCODE_LEFT:
- case Common::KEYCODE_KP4:
- moveUsingKeyboard(-1, 0); // Left
- break;
-- case Common::KEYCODE_RIGHT:
-+// case Common::KEYCODE_RIGHT:
- case Common::KEYCODE_KP6:
- moveUsingKeyboard(+1, 0); // Right
- break;
-- case Common::KEYCODE_UP:
-+// case Common::KEYCODE_UP:
- case Common::KEYCODE_KP8:
- moveUsingKeyboard(0, +1); // Up
- break;
-- case Common::KEYCODE_DOWN:
-+// case Common::KEYCODE_DOWN:
- case Common::KEYCODE_KP2:
- moveUsingKeyboard(0, -1); // Down
- break;
---- scummvm-1.1.orig/backends/platform/sdl/graphics.cpp 2010-03-21 22:01:52.000000000 +0100
-+++ scummvm-1.1/backends/platform/sdl/graphics.cpp 2010-03-24 09:34:28.000000000 +0100
-@@ -520,6 +520,56 @@
- height = bestMode->h;
- }
-
-+#ifdef MAEMO_SDL
-+#include "SDL_syswm.h"
-+
-+static void maemo5_WM_init(int fullscreen){
-+//static int fsdone=0;
-+//static int wmdone=0;
-+SDL_SysWMinfo info;
-+SDL_VERSION(&info.version);
-+if ( SDL_GetWMInfo(&info) ) {
-+ Display *dpy = info.info.x11.display;
-+ Window win;
-+ unsigned long val = 1;
-+ Atom atom_zoom = XInternAtom(dpy, "_HILDON_ZOOM_KEY_ATOM", 0);
-+ info.info.x11.lock_func();
-+ win = info.info.x11.fswindow;
-+ if (win)
-+ XChangeProperty (dpy,win,atom_zoom,XA_INTEGER,32,PropModeReplace,(unsigned char *) &val,1); // grab zoom keys
-+ win = info.info.x11.wmwindow;
-+ if (win)
-+ XChangeProperty (dpy,win,atom_zoom,XA_INTEGER,32,PropModeReplace,(unsigned char *) &val,1); // grab zoom keys
-+#if 0
-+ if (win && fullscreen /* && !fsdone */ ) {
-+ XUnmapWindow(dpy,win);
-+ XChangeProperty (dpy,win,atom_zoom,XA_INTEGER,32,PropModeReplace,(unsigned char *) &val,1); // grab zoom keys
-+ Atom atom_noncomposited = XInternAtom(dpy, "_HILDON_NON_COMPOSITED_WINDOW", 0);
-+ Atom atom_wmstate = XInternAtom(dpy, "_NET_WM_STATE", 0);
-+ Atom atom_wmstate_fullscreen = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", 0);
-+ XSetWindowAttributes xattr;
-+ xattr.override_redirect = False;
-+ XChangeProperty (dpy,win,atom_noncomposited,XA_INTEGER,32,PropModeReplace,(unsigned char *) &val,1); // make window not composited
-+ //XChangeWindowAttributes(dpy, win, CWOverrideRedirect, &xattr); //
-+ XChangeProperty (dpy,win,atom_wmstate,XA_ATOM,32,PropModeReplace,(unsigned char *) &atom_wmstate_fullscreen,1); // mark as fullscreen = disable tskswitch button
-+ XMapWindow(dpy,win);
-+ //fsdone=1;
-+ }
-+ win = info.info.x11.wmwindow;
-+ if (win && !fullscreen /* && !wmdone */) {
-+ XUnmapWindow(dpy,win);
-+ XChangeProperty (dpy,win,atom_zoom,XA_INTEGER,32,PropModeReplace,(unsigned char *) &val,1);
-+ XMapWindow(dpy,win);
-+ //wmdone=1;
-+ }
-+#endif
-+ info.info.x11.unlock_func();
-+// XSync(dpy,False);
-+}
-+}
-+#endif
-+
-+
- bool OSystem_SDL::loadGFXMode() {
- assert(_inited);
- _forceFull = true;
-@@ -560,6 +610,9 @@
- error("allocating _screen failed");
- #endif
-
-+#ifdef MAEMO_SDL
-+ maemo5_WM_init(_videoMode.fullscreen);
-+#endif
- //
- // Create the surface that contains the scaled graphics in 16 bit mode
- //
-@@ -939,6 +992,14 @@
- _videoMode.fullscreen = enable;
- _transactionDetails.needHotswap = true;
- }
-+#ifdef MAEMO_SDL
-+ char *caption;
-+ char title[50];
-+ title[49] = '\0';
-+ SDL_WM_GetCaption(&caption, NULL);
-+ if (caption!=NULL) {strncpy(title,caption,49);
-+ setXWindowName(caption); }
-+#endif
- }
-
- void OSystem_SDL::setAspectRatioCorrection(bool enable) {
---- scummvm-1.1.orig/backends/platform/sdl/sdl.cpp 2010-03-21 22:01:52.000000000 +0100
-+++ scummvm-1.1/backends/platform/sdl/sdl.cpp 2010-03-24 00:14:36.000000000 +0100
-@@ -47,6 +47,10 @@
- #include "icons/scummvm.xpm"
-
- #include <time.h> // for getTimeAndDate()
-+#ifdef MAEMO_SDL
-+#include <SDL/SDL_syswm.h>
-+#include <X11/Xutil.h>
-+#endif
-
- //#define SAMPLES_PER_SEC 11025
- #define SAMPLES_PER_SEC 22050
-@@ -212,7 +216,15 @@
- _timerID = SDL_AddTimer(10, &timer_handler, _timer);
- }
-
-- // Invoke parent implementation of this method
-+#ifdef MAEMO_SDL
-+ // some keymappings are done differently for devices with full keyboard (N810=RX-34)
-+ _have_keyboard=0;
-+ char *device=getenv("SCUMMVM_MAEMO_DEVICE");
-+ if (device != NULL)
-+ if ( (strcmp(device,"RX-44") == 0) || (strcmp(device,"RX-48") == 0) || (strcmp(device,"RX-51") == 0))
-+ _have_keyboard=1;
-+#endif
-+ // Invoke parent implementation of this method
- OSystem::initBackend();
-
- _inited = true;
-@@ -429,6 +441,23 @@
- return file.createWriteStream();
- }
-
-+#ifdef MAEMO_SDL
-+void OSystem_SDL::setXWindowName(const char *caption) {
-+ SDL_SysWMinfo info;
-+ SDL_VERSION(&info.version);
-+ if ( SDL_GetWMInfo(&info) ) {
-+ Display *dpy = info.info.x11.display;
-+ Window win;
-+ //if (_videoMode.fullscreen)
-+ win = info.info.x11.fswindow;
-+ if (win) XStoreName(dpy, win, caption);
-+ //else
-+ win = info.info.x11.wmwindow;
-+ if (win) XStoreName(dpy, win, caption);
-+ }
-+}
-+#endif
-+
- void OSystem_SDL::setWindowCaption(const char *caption) {
- Common::String cap;
- byte c;
-@@ -445,6 +474,11 @@
- }
-
- SDL_WM_SetCaption(cap.c_str(), cap.c_str());
-+#ifdef MAEMO_SDL
-+ Common::String cap2("ScummVM - "); // 2 lines in OS2008 task switcher, set first line
-+ cap=cap2+cap;
-+ setXWindowName(cap.c_str());
-+#endif
- }
-
- bool OSystem_SDL::hasFeature(Feature f) {
-@@ -529,6 +563,14 @@
- #endif
- }
-
-+#ifdef MAEMO_SDL
-+// no Maemo version needs setupIcon
-+// also N900 is hit by SDL_WM_SetIcon bug (window cannot receive input)
-+// http://bugzilla.libsdl.org/show_bug.cgi?id=586
-+void OSystem_SDL::setupIcon() {
-+ ;
-+}
-+#else
- void OSystem_SDL::setupIcon() {
- int x, y, w, h, ncols, nbytes, i;
- unsigned int rgba[256];
-@@ -580,6 +622,7 @@
- SDL_FreeSurface(sdl_surf);
- free(icon);
- }
-+#endif
-
- OSystem::MutexRef OSystem_SDL::createMutex() {
- return (MutexRef) SDL_CreateMutex();
---- scummvm-1.1.orig/backends/platform/sdl/events.cpp 2010-04-02 22:45:24.000000000 +0200
-+++ scummvm-1.1/backends/platform/sdl/events.cpp 2010-04-02 22:44:04.000000000 +0200
-@@ -26,7 +26,9 @@
- #include "backends/platform/sdl/sdl.h"
- #include "common/util.h"
- #include "common/events.h"
--
-+#ifdef MAEMO_SDL
-+#include "common/config-manager.h"
-+#endif
- // FIXME move joystick defines out and replace with confile file options
- // we should really allow users to map any key to a joystick button
- #define JOY_DEADZONE 3200
-@@ -232,8 +234,13 @@
-
- bool OSystem_SDL::handleKeyDown(SDL_Event &ev, Common::Event &event) {
-
-+#ifdef MAEMO_SDL
-+// we want to remap first including ctr/shift/alt modifiers
-+ const bool event_complete = remapKey(ev, event);
-+ SDLModToOSystemKeyFlags(ev.key.keysym.mod, event);
-+#else
- SDLModToOSystemKeyFlags(SDL_GetModState(), event);
--
-+#endif
- // Handle scroll lock as a key modifier
- if (ev.key.keysym.sym == SDLK_SCROLLOCK)
- _scrollLock = !_scrollLock;
-@@ -241,8 +248,13 @@
- if (_scrollLock)
- event.kbd.flags |= Common::KBD_SCRL;
-
-+#ifdef MAEMO_SDL
-+ // fullscreen button or ctrl+space toggle full screen mode
-+ if (ev.key.keysym.sym == SDLK_F6 || (_have_keyboard && event.kbd.hasFlags(Common::KBD_CTRL) && (ev.key.keysym.sym == SDLK_SPACE) ) ) {
-+#else
- // Alt-Return and Alt-Enter toggle full screen mode
- if (event.kbd.hasFlags(Common::KBD_ALT) && (ev.key.keysym.sym == SDLK_RETURN || ev.key.keysym.sym == SDLK_KP_ENTER)) {
-+#endif
- beginGFXTransaction();
- setFullscreenMode(!_videoMode.fullscreen);
- endGFXTransaction();
-@@ -276,11 +288,15 @@
- return false;
- }
-
-+#ifndef MAEMO_SDL
- // Ctrl-m toggles mouse capture
- if (event.kbd.hasFlags(Common::KBD_CTRL) && ev.key.keysym.sym == 'm') {
- toggleMouseGrab();
- return false;
- }
-+#else
-+// mouse capture makes no sense for Maemo and ctrl+m is used for global menu
-+#endif
-
- #if defined(MACOSX)
- // On Macintosh', Cmd-Q quits
-@@ -313,7 +329,11 @@
- return false;
- }
-
-+#ifdef MAEMO_SDL
-+ if (event_complete)
-+#else
- if (remapKey(ev, event))
-+#endif
- return true;
-
- event.type = Common::EVENT_KEYDOWN;
-@@ -332,7 +352,12 @@
- event.kbd.ascii = mapKey(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode);
-
- // Ctrl-Alt-<key> will change the GFX mode
-+#ifdef MAEMO_SDL
-+ // we can't call SDL_GetModState(), modifiers can be remapped too
-+ SDLModToOSystemKeyFlags(ev.key.keysym.mod, event);
-+#else
- SDLModToOSystemKeyFlags(SDL_GetModState(), event);
-+#endif
-
- // Set the scroll lock sticky flag
- if (_scrollLock)
-@@ -355,8 +380,20 @@
- }
-
- bool OSystem_SDL::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) {
-+#ifdef MAEMO_SDL
-+ if (ev.button.button == SDL_BUTTON_LEFT){
-+ SDLMod mod=SDL_GetModState();
-+ if (mod & KMOD_SHIFT)
-+ event.type = Common::EVENT_RBUTTONDOWN;
-+ else if ( mod & KMOD_CTRL)
-+ event.type = Common::EVENT_MOUSEMOVE;
-+ else
-+ event.type = Common::EVENT_LBUTTONDOWN;
-+ }
-+#else
- if (ev.button.button == SDL_BUTTON_LEFT)
- event.type = Common::EVENT_LBUTTONDOWN;
-+#endif
- else if (ev.button.button == SDL_BUTTON_RIGHT)
- event.type = Common::EVENT_RBUTTONDOWN;
- #if defined(SDL_BUTTON_WHEELUP) && defined(SDL_BUTTON_WHEELDOWN)
-@@ -372,14 +409,33 @@
- else
- return false;
-
-+#ifdef MAEMO_SDL
-+ // we have touchscreen so we may have no mousemotion events between taps
-+ setMousePos(event.mouse.x, event.mouse.y);
-+ // this is trying to fix wrong action done by mouse click in some engines
-+ // it looks like clicking affects objects in previous mouse position
-+ // if this does not help we should perhaps generate some fake mouse motion event(s)
-+#endif
- fillMouseEvent(event, ev.button.x, ev.button.y);
-
- return true;
- }
-
- bool OSystem_SDL::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) {
-+#ifdef MAEMO_SDL
-+ if (ev.button.button == SDL_BUTTON_LEFT){
-+ SDLMod mod=SDL_GetModState();
-+ if (mod & KMOD_SHIFT)
-+ event.type = Common::EVENT_RBUTTONUP;
-+ else if ( mod & KMOD_CTRL)
-+ event.type = Common::EVENT_MOUSEMOVE;
-+ else
-+ event.type = Common::EVENT_LBUTTONUP;
-+ }
-+#else
- if (ev.button.button == SDL_BUTTON_LEFT)
- event.type = Common::EVENT_LBUTTONUP;
-+#endif
- else if (ev.button.button == SDL_BUTTON_RIGHT)
- event.type = Common::EVENT_RBUTTONUP;
- #if defined(SDL_BUTTON_MIDDLE)
-@@ -503,7 +559,203 @@
- return true;
- }
-
-+// called on SDL KEYUP and KEYDOWN events
- bool OSystem_SDL::remapKey(SDL_Event &ev, Common::Event &event) {
-+#ifdef MAEMO_SDL
-+ static int engine=0;
-+#define ENG_OTHER -1
-+//#define ENG_SCUMM 1
-+ static int game=0;
-+#define GAME_OTHER -1
-+#define GAME_LURE 1
-+#define GAME_SWORD1 2
-+#define GAME_SWORD2 3
-+#define GAME_SAGA 4
-+#define GAME_FW 5
-+//#define GAME_SIMON1 6
-+//#define GAME_SIMON2 7
-+#define GAME_FEEBLE 8
-+//#define GAME_TOUCHE 9
-+#define GAME_DISCWORLD 10
-+#define GAME_CRUISE 11
-+
-+
-+ if (engine == 0){
-+ // one time initialization
-+ Common::String gameid(ConfMan.get("gameid"));
-+ if (gameid.hasPrefix("lure")) {
-+ game=GAME_LURE;
-+ engine=ENG_OTHER;
-+ } else if (gameid.hasPrefix("sword2")) {
-+ game=GAME_SWORD2;
-+ engine=ENG_OTHER;
-+ } else if (gameid.hasPrefix("cine")) {
-+ game=GAME_FW;
-+ engine=ENG_OTHER;
-+/* } else if (gameid == "touche") {
-+ game=GAME_TOUCHE;
-+ engine=ENG_OTHER;
-+ } else if (gameid == "simon1") {
-+ game=GAME_SIMON1;
-+ engine=ENG_OTHER;
-+ } else if (gameid == "simon2") {
-+ game=GAME_SIMON2;
-+ engine=ENG_OTHER;
-+*/
-+ } else if (gameid.hasPrefix("feeble")) {
-+ game=GAME_FEEBLE;
-+ engine=ENG_OTHER;
-+ } else if (gameid.hasPrefix("sword1")) {
-+ game=GAME_SWORD1;
-+ engine=ENG_OTHER;
-+ } else if (gameid.hasPrefix("saga")) {
-+ game=GAME_SAGA;
-+ engine=ENG_OTHER;
-+ } else if (gameid.hasPrefix("tinsel")) {
-+ game=GAME_DISCWORLD;
-+ engine=ENG_OTHER;
-+ } else if (gameid.hasPrefix("cruise")) {
-+ game=GAME_CRUISE;
-+ engine=ENG_OTHER;
-+ } else {
-+ game=GAME_OTHER;
-+ engine=ENG_OTHER;
-+ }
-+ }
-+ // global mapping - N810, N900
-+ if (_have_keyboard && (ev.key.keysym.mod & KMOD_CTRL)){
-+ // map ctrl-m to ctrl F5 = global scummvm menu
-+ if (ev.key.keysym.sym==SDLK_m) ev.key.keysym.sym=SDLK_F5 ;
-+ }
-+ if (_have_keyboard && (ev.key.keysym.mod & KMOD_SHIFT)){
-+ // map shift backspace to escape, shift enter to menu key
-+ if (ev.key.keysym.sym==SDLK_BACKSPACE) { ev.key.keysym.sym=SDLK_ESCAPE ; ev.key.keysym.mod = (SDLMod) (ev.key.keysym.mod & ~KMOD_SHIFT); }
-+ if (ev.key.keysym.sym==SDLK_KP_ENTER) { ev.key.keysym.sym=SDLK_F4; ev.key.keysym.mod = (SDLMod) (ev.key.keysym.mod & ~KMOD_SHIFT); }
-+ }
-+
-+ // engine specific mappings
-+ switch (engine){
-+ // nothing now
-+ }
-+ // game specific mapping
-+ switch (game) {
-+ case GAME_LURE:
-+ if ((ev.key.keysym.sym==SDLK_F8 && _have_keyboard ) || (ev.key.keysym.sym==SDLK_F4 && !_have_keyboard)){
-+ // map zoom - to right click if we have keyboard (N810), otherwise map menu key (770,N800)
-+ event.type = ((ev.type==SDL_KEYUP) ? Common::EVENT_RBUTTONUP : Common::EVENT_RBUTTONDOWN );
-+ event.mouse.x = _mouseCurState.x;
-+ event.mouse.y = _mouseCurState.y;
-+ return true;
-+
-+ }
-+ switch(ev.key.keysym.sym){
-+ case SDLK_F5: // map F5 (home key) to f9 = restart game
-+ ev.key.keysym.sym=SDLK_F9;
-+ break;
-+ case SDLK_F8: // map F8 (zoom - key) to F5 (save dialog) in game
-+ ev.key.keysym.sym=SDLK_F5;
-+ break;
-+ case SDLK_F4: // same as above, only one mapping happens due to right click maping above
-+ ev.key.keysym.sym=SDLK_F5;
-+ default:
-+ ;
-+ }
-+ break;
-+ case GAME_FW:
-+ // Future Wars - no mapping here, done in game engine
-+ break;
-+ case GAME_FEEBLE:
-+ if ((ev.key.keysym.sym==SDLK_F8 && _have_keyboard ) || (ev.key.keysym.sym==SDLK_F4 && !_have_keyboard)){
-+ // map zoom - to right click if we have keyboard (N810), otherwise map menu key (770,N800)
-+ event.type = ((ev.type==SDL_KEYUP) ? Common::EVENT_RBUTTONUP : Common::EVENT_RBUTTONDOWN );
-+ event.mouse.x = _mouseCurState.x;
-+ event.mouse.y = _mouseCurState.y;
-+ return true;
-+
-+ }
-+ if (!_have_keyboard) switch(ev.key.keysym.sym){
-+ case SDLK_F7: // map F7 (zoom + key) to letter y
-+ ev.key.keysym.sym=SDLK_y;
-+ break;
-+ case SDLK_F8: // map F8 (zoom - key) to letter 1
-+ ev.key.keysym.sym=SDLK_1;
-+ break;
-+ default:
-+ ;
-+ }
-+ break;
-+ case GAME_DISCWORLD:
-+ switch(ev.key.keysym.sym) {
-+ case SDLK_F8: // map F8 (zoom - key) to right click
-+ event.type = ((ev.type==SDL_KEYUP) ? Common::EVENT_RBUTTONUP : Common::EVENT_RBUTTONDOWN );
-+ event.mouse.x = _mouseCurState.x;
-+ event.mouse.y = _mouseCurState.y;
-+ return true;
-+ // now map F7 (=zoom+) to Enter for N810 (useful when closed)
-+ case SDLK_F7:
-+ if (_have_keyboard) ev.key.keysym.sym=SDLK_RETURN; else ev.key.keysym.sym=SDLK_y;
-+ break;
-+ case SDLK_F4: // map menu key to game menu
-+ case SDLK_F5: // swap/home key too
-+ ev.key.keysym.sym=SDLK_F1;
-+ break;
-+ default:
-+ ;
-+ }
-+ break;
-+ case GAME_CRUISE:
-+ switch(ev.key.keysym.sym) {
-+ case SDLK_F8: // map F8 (zoom - key) to right click
-+ event.type = ((ev.type==SDL_KEYUP) ? Common::EVENT_RBUTTONUP : Common::EVENT_RBUTTONDOWN );
-+ event.mouse.x = _mouseCurState.x;
-+ event.mouse.y = _mouseCurState.y;
-+ return true;
-+ // now map F7 (=zoom+) to menu for N810 (useful when closed)
-+ case SDLK_F7:
-+ if (_have_keyboard) ev.key.keysym.sym=SDLK_F10; else ev.key.keysym.sym=SDLK_p;
-+ break;
-+ case SDLK_F4: // map menu key to game menu
-+ ev.key.keysym.sym=SDLK_F10;
-+ break;
-+ default:
-+ ;
-+ }
-+ break;
-+ default:
-+ //case GAME_SWORD2:
-+ //case GAME_SWORD1:
-+ //case GAME_SAGA: //I Have No Mouth
-+ if (!_have_keyboard) switch(ev.key.keysym.sym){
-+ case SDLK_F7: // map F7 (zoom + key) to letter y for save game entry and 'yes' replies (simon, touche)
-+ ev.key.keysym.sym=SDLK_y;
-+ break;
-+ case SDLK_F8: // map F8 (zoom - key) to letter 1 for save game entry and copyprotection in monkey2
-+ ev.key.keysym.sym=SDLK_1;
-+ break;
-+ default:
-+ ;
-+ } else switch(ev.key.keysym.sym) {
-+ case SDLK_F8: // map F8 (zoom - key) to right click
-+ event.type = ((ev.type==SDL_KEYUP) ? Common::EVENT_RBUTTONUP : Common::EVENT_RBUTTONDOWN );
-+ event.mouse.x = _mouseCurState.x;
-+ event.mouse.y = _mouseCurState.y;
-+ return true;
-+ // now map F7 (=zoom+) to menu (=F4) so we can have same mapping for N810 and 770/800 for menu key
-+ // N800's real menu key is hidden on retractable keyboard so we use zoom+ for it instead too
-+ case SDLK_F7:
-+ ev.key.keysym.sym=SDLK_F4;
-+ break;
-+ /* with real keyboard we can afford to lose F7, do not remap F4 back
-+ case SDLK_F4:
-+ ev.key.keysym.sym=SDLK_F7;
-+ break; */
-+ default:
-+ ;
-+ }
-+ break;
-+ }
-+#endif //SDL_MAEMO
-+
- #ifdef LINUPY
- // On Yopy map the End button to quit
- if ((ev.key.keysym.sym == 293)) {
---- scummvm-1.1.orig/backends/platform/sdl/sdl.h 2010-03-21 22:01:52.000000000 +0100
-+++ scummvm-1.1/backends/platform/sdl/sdl.h 2010-03-24 00:14:36.000000000 +0100
-@@ -230,6 +230,9 @@
- virtual int getGraphicsMode() const;
-
- virtual void setWindowCaption(const char *caption);
-+#ifdef MAEMO_SDL
-+ void setXWindowName(const char *caption);
-+#endif
- virtual bool openCD(int drive);
-
- virtual bool hasFeature(Feature f);
-@@ -418,6 +421,9 @@
- // joystick
- SDL_Joystick *_joystick;
-
-+#ifdef MAEMO_SDL
-+ int _have_keyboard;
-+#endif
- // Shake mode
- int _currentShakePos;
- int _newShakePos;
diff --git a/backends/platform/n64/Makefile b/backends/platform/n64/Makefile
index cffe277312..4f3744f7e8 100644
--- a/backends/platform/n64/Makefile
+++ b/backends/platform/n64/Makefile
@@ -90,4 +90,3 @@ spotless : distclean
send: $(TARGET).v64
sudo ucon64 --xv64 $(TARGET).v64
-
diff --git a/backends/platform/n64/README.N64 b/backends/platform/n64/README.N64
index b47b239658..42f78f4754 100644
--- a/backends/platform/n64/README.N64
+++ b/backends/platform/n64/README.N64
@@ -113,4 +113,3 @@ Notes
==========
Write the rest of this README.
-
diff --git a/backends/platform/n64/framfs_save_manager.cpp b/backends/platform/n64/framfs_save_manager.cpp
index 983b9aba8d..78f5333f2e 100644
--- a/backends/platform/n64/framfs_save_manager.cpp
+++ b/backends/platform/n64/framfs_save_manager.cpp
@@ -69,4 +69,3 @@ Common::StringArray FRAMSaveManager::listSavefiles(const Common::String &pattern
return list;
}
-
diff --git a/backends/platform/n64/framfs_save_manager.h b/backends/platform/n64/framfs_save_manager.h
index d50c17d85b..da553e423a 100644
--- a/backends/platform/n64/framfs_save_manager.h
+++ b/backends/platform/n64/framfs_save_manager.h
@@ -129,4 +129,3 @@ public:
#endif
-
diff --git a/backends/platform/n64/n64.mk b/backends/platform/n64/n64.mk
index 2e383e670d..83ad405503 100644
--- a/backends/platform/n64/n64.mk
+++ b/backends/platform/n64/n64.mk
@@ -26,4 +26,3 @@ endif
$(srcdir)/backends/platform/n64/pad_rom.sh scummvm.v64
rm scummvm.bak
mv scummvm.v64 $(bundle_name)/scummvm.v64
-
diff --git a/backends/platform/n64/nintendo64.cpp b/backends/platform/n64/nintendo64.cpp
index 3e811e73d2..bc416157e6 100644
--- a/backends/platform/n64/nintendo64.cpp
+++ b/backends/platform/n64/nintendo64.cpp
@@ -31,4 +31,3 @@ int main(void) {
g_system->quit(); // TODO: Consider removing / replacing this!
return res;
}
-
diff --git a/backends/platform/n64/osys_n64.h b/backends/platform/n64/osys_n64.h
index 354f25a1cf..4788beb1ca 100644
--- a/backends/platform/n64/osys_n64.h
+++ b/backends/platform/n64/osys_n64.h
@@ -212,4 +212,3 @@ public:
};
#endif /* __OSYS_N64_H__ */
-
diff --git a/backends/platform/n64/osys_n64_base.cpp b/backends/platform/n64/osys_n64_base.cpp
index 4bc3780fe2..c3adb9691c 100644
--- a/backends/platform/n64/osys_n64_base.cpp
+++ b/backends/platform/n64/osys_n64_base.cpp
@@ -922,4 +922,3 @@ void OSystem_N64::detectControllers(void) {
inline uint16 colRGB888toBGR555(byte r, byte g, byte b) {
return ((r >> 3) << 1) | ((g >> 3) << 6) | ((b >> 3) << 11);
}
-
diff --git a/backends/platform/n64/osys_n64_events.cpp b/backends/platform/n64/osys_n64_events.cpp
index 62f11aef64..c83eb194ac 100644
--- a/backends/platform/n64/osys_n64_events.cpp
+++ b/backends/platform/n64/osys_n64_events.cpp
@@ -439,4 +439,3 @@ bool OSystem_N64::pollEvent(Common::Event &event) {
return false;
}
-
diff --git a/backends/platform/n64/osys_n64_utilities.cpp b/backends/platform/n64/osys_n64_utilities.cpp
index 0622e6423d..94d727e421 100644
--- a/backends/platform/n64/osys_n64_utilities.cpp
+++ b/backends/platform/n64/osys_n64_utilities.cpp
@@ -115,4 +115,3 @@ int timer_handler(int t) {
tm->handler();
return t;
}
-
diff --git a/backends/platform/n64/pad_rom.sh b/backends/platform/n64/pad_rom.sh
index 085203306f..463eeb4e28 100755
--- a/backends/platform/n64/pad_rom.sh
+++ b/backends/platform/n64/pad_rom.sh
@@ -10,4 +10,3 @@ REMAINDER=`echo $BASESIZE - $REMAINDER | bc`
CARTSIZE=`echo $CARTSIZE + $REMAINDER | bc`
ucon64 -q --n64 --v64 --chk --padn=$CARTSIZE $1
-
diff --git a/backends/platform/n64/pakfs_save_manager.cpp b/backends/platform/n64/pakfs_save_manager.cpp
index df9baa4d21..bf2fe8b1bc 100644
--- a/backends/platform/n64/pakfs_save_manager.cpp
+++ b/backends/platform/n64/pakfs_save_manager.cpp
@@ -70,4 +70,3 @@ Common::StringArray PAKSaveManager::listSavefiles(const Common::String &pattern)
return list;
}
-
diff --git a/backends/platform/n64/pakfs_save_manager.h b/backends/platform/n64/pakfs_save_manager.h
index 6987801294..e0fcbc1e2d 100644
--- a/backends/platform/n64/pakfs_save_manager.h
+++ b/backends/platform/n64/pakfs_save_manager.h
@@ -130,4 +130,3 @@ public:
#endif
-
diff --git a/backends/platform/n64/portdefs.h b/backends/platform/n64/portdefs.h
index 35ef3c71db..677ad48477 100644
--- a/backends/platform/n64/portdefs.h
+++ b/backends/platform/n64/portdefs.h
@@ -49,4 +49,3 @@ typedef signed int int32;
#define SCUMMVM_DONT_DEFINE_TYPES
#endif
-
diff --git a/backends/platform/openpandora/build/PXML.xml b/backends/platform/openpandora/build/PXML.xml
index f4d2e2a595..a87c49e2b8 100755
--- a/backends/platform/openpandora/build/PXML.xml
+++ b/backends/platform/openpandora/build/PXML.xml
@@ -1,34 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<PXML xmlns="http://openpandora.org/namespaces/PXML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PXML_schema.xsd">
-
- <application id="scummvm.djwillis.0001" appdata="scummvm">
-
- <title lang="en_US">ScummVM</title>
-
- <exec command="./runscummvm.sh"/>
- <icon src="icon/scummvm.png"/>
-
- <previewpics>
- <pic src="icon/preview-pic.png"/>
- </previewpics>
-
- <info name="ScummVM Documentation" type="text/html" src="docs/index.html"/>
-
- <description lang="en_US">Point & click game interpreter.</description>
-
- <author name="DJWillis" website="http://www.scummvm.org/"/>
-
- <version major="1" minor="1" release="1" build="1"/><!--This programs version-->
- <osversion major="1" minor="0" release="0" build="0"/><!--The minimum OS version required-->
-
- <categories>
- <category name="Game"><!--category like "Games", "Graphics", "Internet" etc-->
- <subcategory name="Adventure Games"/><!--subcategory, like "Board Games", "Strategy", "First Person Shooters"-->
- </category>
- </categories>
-
- <clockspeed frequency="500"/><!--Frequency in Hz-->
-
- </application>
-
+ <!-- This is the package, in our case ScummVM -->
+ <package id="scummvm.djwillis.0001">
+ <author name="DJWillis" website="http://www.scummvm.org/"/>
+ <!-- version type can be alpha, beta or release, set to release in branch -->
+ <version major="1" minor="4" release="0" build="1" type="alpha"/>
+ <!-- Both title and titles are needed -->
+ <title lang="en_US">ScummVM</title>
+ <titles>
+ <title lang="en_US">ScummVM</title>
+ </titles>
+ <descriptions>
+ <description lang="en_US">
+ ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games, provided you already have their data files. The clever part about this: ScummVM just replaces the executables shipped with the games, allowing you to play them on systems for which they were never designed!
+
+ ScummVM supports many adventure games, including LucasArts SCUMM games (such as Monkey Island 1-3, Day of the Tentacle, Sam &amp; Max, ...), many of Sierra's AGI and SCI games (such as King's Quest 1-6, Space Quest 1-5, ...), Discworld 1 and 2, Simon the Sorcerer 1 and 2, Beneath A Steel Sky, Lure of the Temptress, Broken Sword 1 and 2, Flight of the Amazon Queen, Gobliiins 1-3, The Legend of Kyrandia 1-3, many of Humongous Entertainment's children's SCUMM games (including Freddi Fish and Putt Putt games) and many more.
+ </description>
+ </descriptions>
+ <icon src="icon/scummvm.png"/>
+ </package>
+
+ <!-- This is the application, the ScummVM binary -->
+ <application id="scummvm.djwillis.0001" appdata="scummvm">
+ <exec command="./runscummvm.sh"/>
+ <author name="DJWillis" website="http://www.scummvm.org/"/>
+ <!-- version type can be alpha, beta or release, set to release in branch -->
+ <version major="1" minor="4" release="0" build="1" type="alpha"/>
+ <!-- Both title and titles are needed -->
+ <title lang="en_US">ScummVM</title>
+ <titles>
+ <title lang="en_US">ScummVM</title>
+ </titles>
+ <descriptions>
+ <description lang="en_US">
+ ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games, provided you already have their data files. The clever part about this: ScummVM just replaces the executables shipped with the games, allowing you to play them on systems for which they were never designed!
+
+ ScummVM supports many adventure games, including LucasArts SCUMM games (such as Monkey Island 1-3, Day of the Tentacle, Sam &amp; Max, ...), many of Sierra's AGI and SCI games (such as King's Quest 1-6, Space Quest 1-5, ...), Discworld 1 and 2, Simon the Sorcerer 1 and 2, Beneath A Steel Sky, Lure of the Temptress, Broken Sword 1 and 2, Flight of the Amazon Queen, Gobliiins 1-3, The Legend of Kyrandia 1-3, many of Humongous Entertainment's children's SCUMM games (including Freddi Fish and Putt Putt games) and many more.
+ </description>
+ </descriptions>
+ <licenses>
+ <license name="GPLv2" url="http://www.gnu.org/licenses/gpl-2.0.html" sourcecodeurl="http://www.scummvm.org"/>
+ </licenses>
+ <icon src="icon/scummvm.png"/>
+ <previewpics>
+ <pic src="icon/preview-pic.png"/>
+ </previewpics>
+ <info name="ScummVM Documentation" type="text/html" src="docs/index.html"/>
+ <categories>
+ <category name="Game">
+ <subcategory name="AdventureGame"/>
+ </category>
+ </categories>
+ </application>
</PXML>
diff --git a/backends/platform/openpandora/build/PXML_schema.xsd b/backends/platform/openpandora/build/PXML_schema.xsd
new file mode 100644
index 0000000000..7c0d635016
--- /dev/null
+++ b/backends/platform/openpandora/build/PXML_schema.xsd
@@ -0,0 +1,341 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema targetNamespace="http://openpandora.org/namespaces/PXML" xmlns="http://openpandora.org/namespaces/PXML" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified">
+
+
+ <!-- declare some simpleTypes for later usage -->
+
+ <!-- Specify params allows with the 'x11' entry in exec -->
+ <xs:simpleType name="x11Param">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="req" />
+ <xs:enumeration value="stop" />
+ <xs:enumeration value="ignore" />
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- Specify the valid documentation formats in the <info> block -->
+ <xs:simpleType name="docType">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="text/html" />
+ <xs:enumeration value="text/plain" />
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- Make sure that version numbers only consist of letters, numbers and + as well as - -->
+ <xs:simpleType name="versionNumber">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:pattern value="[a-zA-Z0-9+-]*" />
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- Specify what is valid as release type -->
+ <xs:simpleType name="releaseType">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="alpha" />
+ <xs:enumeration value="beta" />
+ <xs:enumeration value="release" />
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- Specify what makes an email address "valid" -->
+ <xs:simpleType name="emailAddress">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[^@]+@[^\.]+\..+"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- some restrictions regarding file names that are eg not allowed/possible when using sd cards formated as fat32 -->
+ <xs:simpleType name="dumbPath">
+ <xs:restriction base="xs:normalizedString">
+ <xs:pattern value="[^?>:]+" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="dumbFolderName">
+ <xs:restriction base="xs:normalizedString">
+ <xs:pattern value="[^?>:/]+" />
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- Specify lang codes -->
+ <xs:simpleType name="isoLangcode">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="2"/>
+ <xs:pattern value="[a-zA-Z]{2,3}(_[a-zA-Z0-9]{2,3})*" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="isoLangcode_en_US">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="en_US" />
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- Definition of all allowed categories following the FDO specs -->
+ <xs:simpleType name="fdoCategory">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="AudioVideo|Audio|Video|Development|Education|Game|Graphics|Network|Office|Settings|System|Utility"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <!-- Definition of all allowed subcategories following the FDO specs (should be based upon the given main categories, but would significantly increase complexity of the schema) -->
+ <xs:simpleType name="fdoSubCategory">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="Building|Debugger|IDE|GUIDesigner|Profiling|RevisionControl|Translation|Calendar|ContactManagement|Database|Dictionary|Chart|Email|Finance|FlowChart|PDA|ProjectManagement|Presentation|Spreadsheet|WordProcessor|2DGraphics|VectorGraphics|RasterGraphics|3DGraphics|Scanning|OCR|Photography|Publishing|Viewer|TextTools|DesktopSettings|HardwareSettings|Printing|PackageManager|Dialup|InstantMessaging|Chat|IRCClient|FileTransfer|HamRadio|News|P2P|RemoteAccess|Telephony|TelephonyTools|VideoConference|WebBrowser|WebDevelopment|Midi|Mixer|Sequencer|Tuner|TV|AudioVideoEditing|Player|Recorder|DiscBurning|ActionGame|AdventureGame|ArcadeGame|BoardGame|BlocksGame|CardGame|KidsGame|LogicGame|RolePlaying|Simulation|SportsGame|StrategyGame|Art|Construction|Music|Languages|Science|ArtificialIntelligence|Astronomy|Biology|Chemistry|ComputerScience|DataVisualization|Economy|Electricity|Geography|Geology|Geoscience|History|ImageProcessing|Literature|Math|NumericalAnalysis|MedicalSoftware|Physics|Robotics|Sports|ParallelComputing|Amusement|Archiving|Compression|Electronics|Emulator|Engineering|FileTools|FileManager|TerminalEmulator|Filesystem|Monitor|Security|Accessibility|Calculator|Clock|TextEditor|Documentation|Core|KDE|GNOME|GTK|Qt|Motif|Java|ConsoleOnly"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- Create some way to enforce entries to be nonempty -->
+ <xs:simpleType name="nonempty_token">
+ <xs:restriction base="xs:token">
+ <xs:minLength value="1"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="nonempty_string">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="nonempty_normalizedString">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+
+
+ <!-- declare some complexTypes for later usage -->
+
+ <!-- type used for file associations -->
+ <xs:complexType name="association_data">
+ <xs:attribute name="name" use="required" type="nonempty_normalizedString" />
+ <xs:attribute name="filetype" use="required" type="nonempty_token" />
+ <xs:attribute name="exec" use="required" type="nonempty_token" />
+ </xs:complexType>
+
+ <!-- type used for author info -->
+ <xs:complexType name="author_data">
+ <xs:attribute name="name" use="required" type="nonempty_normalizedString" />
+ <xs:attribute name="website" use="optional" type="xs:anyURI" />
+ <xs:attribute name="email" use="optional" type="emailAddress" />
+ </xs:complexType>
+
+ <!-- type used for version informations (full entry as well as os version) -->
+ <xs:complexType name="app_version_info">
+ <xs:attribute name="major" use="required" type="versionNumber" />
+ <xs:attribute name="minor" use="required" type="versionNumber" />
+ <xs:attribute name="release" use="required" type="versionNumber" />
+ <xs:attribute name="build" use="required" type="versionNumber" />
+ <xs:attribute name="type" use="optional" type="releaseType" />
+ </xs:complexType>
+ <xs:complexType name="os_version_info">
+ <xs:attribute name="major" use="required" type="versionNumber" />
+ <xs:attribute name="minor" use="required" type="versionNumber" />
+ <xs:attribute name="release" use="required" type="versionNumber" />
+ <xs:attribute name="build" use="required" type="versionNumber" />
+ </xs:complexType>
+
+ <!-- type used for exec entries -->
+ <xs:complexType name="exec_params">
+ <xs:attribute name="command" use="required" type="nonempty_token" />
+ <xs:attribute name="arguments" use="optional" type="nonempty_token" />
+ <xs:attribute name="background" use="optional" type="xs:boolean" />
+ <xs:attribute name="startdir" use="optional" type="dumbPath" />
+ <xs:attribute name="standalone" use="optional" type="xs:boolean" />
+ <xs:attribute name="x11" use="optional" type="x11Param" />
+ </xs:complexType>
+
+ <!-- type used for tiles or descriptions, once in 'normal' version, once enforcing usage of en_US -->
+ <xs:complexType name="title_or_description">
+ <xs:simpleContent>
+ <xs:extension base="nonempty_string">
+ <xs:attribute name="lang" use="required" type="isoLangcode" />
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ <xs:complexType name="title_or_description_enUS">
+ <xs:simpleContent>
+ <xs:extension base="nonempty_string">
+ <xs:attribute name="lang" use="required" type="isoLangcode_en_US" />
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <!-- type used for referencing images -->
+ <xs:complexType name="image_entry">
+ <xs:attribute name="src" use="required" type="dumbPath" />
+ </xs:complexType>
+
+ <!-- type for referencing manuals/readme docs -->
+ <xs:complexType name="information_entry">
+ <xs:attribute name="name" use="required" type="nonempty_normalizedString" />
+ <xs:attribute name="type" use="required" type="docType" />
+ <xs:attribute name="src" use="required" type="dumbPath" />
+ </xs:complexType>
+
+ <!-- type used for the license information -->
+ <xs:complexType name="license_info">
+ <xs:attribute name="name" use="required" type="nonempty_normalizedString" />
+ <xs:attribute name="url" use="optional" type="xs:anyURI" />
+ <xs:attribute name="sourcecodeurl" use="optional" type="xs:anyURI" />
+ </xs:complexType>
+
+
+
+ <!-- Combine the symple and complex types into the "real" PXML specification -->
+
+ <xs:element name="PXML">
+ <xs:complexType>
+ <xs:sequence>
+ <!-- specify the <package> tag with info about the complete package, information providable:
+ author
+ version
+ title(s)
+ description(s)
+ icon
+ -->
+ <xs:element name="package" minOccurs="1" maxOccurs="1">
+ <xs:complexType>
+ <xs:all>
+ <!--Author info-->
+ <xs:element name="author" type="author_data" minOccurs="1" />
+ <!--App version info-->
+ <xs:element name="version" type="app_version_info" minOccurs="1" />
+ <!--Title-->
+ <xs:element name="titles" minOccurs="1">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="title" type="title_or_description_enUS" minOccurs="1" maxOccurs="1" />
+ <xs:element name="title" type="title_or_description" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <!--Description-->
+ <xs:element name="descriptions" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="title" type="title_or_description_enUS" minOccurs="0" maxOccurs="1" />
+ <xs:element name="description" type="title_or_description" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <!--Icon-->
+ <xs:element name="icon" type="image_entry" minOccurs="0" />
+ </xs:all>
+ <!--Package ID-->
+ <xs:attribute name="id" use="required" type="dumbFolderName" />
+ </xs:complexType>
+ </xs:element>
+ <!-- specify the <application> tag with info about a single program
+ executable call
+ author
+ version (of the application)
+ osversion (min OS version supported)
+ title(s) (allowing compatibility to <HF6, too!)
+ description(s) (allowing compatibility to <HF6, too!)
+ icon
+ license
+ preview pictures
+ info/manual/readme entry
+ categories
+ associations to file types
+ clockspeed
+ -->
+ <xs:element name="application" minOccurs="1" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:all>
+ <!--Execution params -->
+ <xs:element name="exec" type="exec_params" minOccurs="1" />
+ <!--Author info-->
+ <xs:element name="author" type="author_data" minOccurs="1" />
+ <!--App version info-->
+ <xs:element name="version" type="app_version_info" minOccurs="1" />
+ <!--OS Version info-->
+ <xs:element name="osversion" type="os_version_info" minOccurs="0" />
+ <!--Title-->
+ <!-- via <titles> element, used for HF6+ -->
+ <xs:element name="titles" minOccurs="1">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="title" type="title_or_description_enUS" minOccurs="1" maxOccurs="1" />
+ <xs:element name="title" type="title_or_description" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <!--Title-->
+ <!-- via <title> element, only one for en_US allowed, meant for backwards compatibility with libpnd from <HF6 -->
+ <xs:element name="title" type="title_or_description_enUS" minOccurs="0" />
+ <!--Description-->
+ <!-- via <descriptions> element, used for HF6+ -->
+ <xs:element name="descriptions" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="description" type="title_or_description_enUS" minOccurs="1" maxOccurs="1" />
+ <xs:element name="description" type="title_or_description" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <!--Description-->
+ <!-- via <description> element, only one for en_US allowed, meant for backwards compatibility with libpnd from <HF6 -->
+ <xs:element name="description" type="title_or_description_enUS" minOccurs="0" />
+ <!--Icon-->
+ <xs:element name="icon" type="image_entry" minOccurs="0" />
+ <!--License-->
+ <xs:element name="licenses" minOccurs="1">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="license" type="license_info" minOccurs="1" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <!--Preview pics-->
+ <xs:element name="previewpics" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="pic" type="image_entry" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <!--Info (aka manual or readme entry)-->
+ <xs:element name="info" type="information_entry" minOccurs="0" />
+ <!--Categories-->
+ <xs:element name="categories" minOccurs="1">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="category" minOccurs="1" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="subcategory" minOccurs="0" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:attribute name="name" type="fdoSubCategory" />
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ <xs:attribute name="name" use="required" type="fdoCategory" />
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <!--Associations-->
+ <xs:element name="associations" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="association" type="association_data" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <!--Clockspeed-->
+ <xs:element name="clockspeed" minOccurs="0">
+ <xs:complexType>
+ <xs:attribute name="frequency" use="required" type="xs:positiveInteger" />
+ </xs:complexType>
+ </xs:element>
+ </xs:all>
+ <!--AppID-->
+ <xs:attribute name="id" use="required" type="dumbFolderName" />
+ <xs:attribute name="appdata" use="optional" type="dumbFolderName" />
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/backends/platform/openpandora/build/pnd_make.sh b/backends/platform/openpandora/build/pnd_make.sh
index b19de87bb4..0c03e8154d 100755
--- a/backends/platform/openpandora/build/pnd_make.sh
+++ b/backends/platform/openpandora/build/pnd_make.sh
@@ -1,65 +1,321 @@
-#!/bin/sh
+#!/bin/bash
+#
+# pnd_make.sh
+#
+# This script is meant to ease generation of a pnd file. Please consult the output
+# when running --help for a list of available parameters and an explaination of
+# those.
+#
+# Required tools when running the script:
+# bash
+# echo, cat, mv, rm
+# mkisofs or mksquashfs (the latter when using the -c param!)
+# xmllint (optional, only for validation of the PXML against the schema)
-######adjust path of genpxml.sh if you want to use that "feture"#####
-TEMP=`getopt -o p:d:x:i:c -- "$@"`
+PXML_schema=$(dirname ${0})/PXML_schema.xsd
+GENPXML_PATH=$(dirname ${0})/genpxml.sh
-if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
+# useful functions ...
+black='\E[30m'
+red='\E[31m'
+green='\E[32m'
+yellow='\E[33m'
+blue='\E[34m'
+magenta='\E[35m'
+cyan='\E[36m'
+white='\E[37m'
-eval set -- "$TEMP"
-while true ; do
- case "$1" in
- -p) echo "PNDNAME set to $2" ;PNDNAME=$2;shift 2;;
- -d) echo "FOLDER set to $2" ;FOLDER=$2;shift 2 ;;
- -x) echo "PXML set to $2" ;PXML=$2;shift 2 ;;
- -i) echo "ICON set to $2" ;ICON=$2;shift 2 ;;
- -c) echo "-c set, will create compressed squasfs image instead of iso $2" ;SQUASH=1;shift 1 ;;
- --) shift ; break ;;
- *) echo "Error while parsing arguments! $2" ; exit 1 ;;
- esac
+check_for_tool()
+{
+ which $1 &> /dev/null
+ if [ "$?" -ne "0" ];
+ then
+ cecho "ERROR: Could not find the program '$1'. Please make sure
+that it is available in your PATH since it is required to complete your request." $red
+ exit 1
+ fi
+}
+
+cecho () # Color-echo. Argument $1 = message, Argument $2 = color
+{
+ local default_msg="No message passed." # Doesn't really need to be a local variable.
+ message=${1:-$default_msg} # Defaults to default message.
+ color=${2:-$black} # Defaults to black, if not specified.
+ echo -e "$color$message"
+ tput sgr0 # Reset to normal.
+ return
+}
+
+
+print_help()
+{
+ cat << EOSTREAM
+pnd_make.sh - A script to package "something" into a PND.
+
+Usage:
+ $(basename ${0}) {--directory|-d} <folder> {--pndname|-p} <file> [{--compress-squashfs|-c}]
+ [{--genpxml} <file>] [{--icon|-i} <file>] [{--pxml|-x} <file>]
+ [{--schema|-s} <file>] [{--help|-h}]
+
+
+Switches:
+ --compress-squashfs / -c Define whether or not the pnd should be compressed using
+ squashfs. If this parameter is selected, a compressed pnd
+ will be created.
+
+ --directory / -d Sets the folder that is to be used for the resulting pnd
+ to <folder>. This option is mandatory for the script to
+ function correctly.
+
+ --genpxml Sets the script used for generating a PXML file (if none
+ is available already) to <file>. Please make sure to either
+ provide a full path or prefix a script in the current folder
+ with './' so that the script can actually be executed. If
+ this variable is not specified, $GENPXML_PATH
+ will be used.
+
+ --help / -h Displays this help text.
+
+ --icon / -i Sets the icon that will be appended in the pnd to <file>.
+
+ --pndname / -p Sets the output filename of the resulting pnd to <file>.
+ This option is mandatory for the script to function
+ correctly.
+
+ --pxml / -x Sets the PXML file that is to be used to <file>. If you
+ neither provide a PXML file or set this entry to 'guess',
+ an existing 'PXML.xml' in your selected '--directory'
+ will be used, or the script $GENPXML_PATH
+ will be called to try to generate a basic PXML file for you.
+
+ --schema / -s Sets the schema file, that is to be used for validation,
+ to <file. If this is not defined, the script will try to
+ use the file '$PXML_schema'. If this fails,
+ a warning is issued.
+
+If you select the option to create a compressed squashfs, a version >=4.0 of squashfs
+is required to be available in your PATH.
+EOSTREAM
+}
+
+
+# Parse command line parameters
+while [ "${1}" != "" ]; do
+ if [ "${1}" = "--compress-squashfs" ] || [ "${1}" = "-c" ];
+ then
+ SQUASH=1
+ shift 1
+ elif [ "${1}" = "--directory" ] || [ "${1}" = "-d" ];
+ then
+ FOLDER=$2
+ shift 2
+ elif [ "${1}" = "--genpxml" ];
+ then
+ GENPXML_PATH=$2
+ shift 2
+ elif [ "${1}" = "--help" ] || [ "${1}" = "-h" ];
+ then
+ print_help
+ exit 0
+ elif [ "${1}" = "--icon" ] || [ "${1}" = "-i" ];
+ then
+ ICON=$2
+ shift 2
+ elif [ "${1}" = "--pndname" ] || [ "${1}" = "-p" ];
+ then
+ PNDNAME=$2
+ shift 2
+ elif [ "${1}" = "--pxml" ] || [ "${1}" = "-x" ];
+ then
+ PXML=$2
+ shift 2
+ elif [ "${1}" = "--schema" ] || [ "${1}" = "-f" ]
+ then
+ PXML_schema=$2
+ shift 2
+ else
+ cecho "ERROR: '$1' is not a known argument. Printing --help and aborting." $red
+ print_help
+ exit 1
+ fi
done
-rnd=$RANDOM; # random number for genpxml and index$rnd.xml
-#generate pxml if guess or empty
-if [ ! $PXML ] || [ $PXML = "guess" ] && [ $PNDNAME ] && [ $FOLDER ]; then
- PXMLtxt=$(/home/user/libpnd/pandora-libraries/testdata/scripts/genpxml.sh $FOLDER $ICON)
- PXML=$FOLDER/PXML.xml
- echo "$PXMLtxt" > $FOLDER/PXML.xml
+# Generate a PXML if the param is set to Guess or it is empty.
+if [ ! $PXML ] || [ $PXML = "guess" ] && [ $PNDNAME ] && [ $FOLDER ];
+then
+ if [ -f $FOLDER/PXML.xml ]; # use the already existing PXML.xml file if there is one...
+ then
+ PXML=$FOLDER/PXML.xml
+ PXML_ALREADY_EXISTING="true"
+ else
+ if [ -f $GENPXML_PATH ];
+ then
+ $GENPXML_PATH --src $FOLDER --dest $FOLDER --author $USER
+ if [ -f $FOLDER/PXML.xml ];
+ then
+ PXML_GENERATED="true"
+ else
+ cecho "ERROR: Generating a PXML file using '$GENPXML_PATH' failed.
+Please generate a PXML file manually." $red
+ exit 1
+ fi
+ else
+ cecho "ERROR: Could not find '$GENPXML_PATH' for generating a PXML file." $red
+ exit 1
+ fi
+ fi
fi
-#check arguments
-if [ ! $PNDNAME ] || [ ! $FOLDER ] || [ ! $PXML ]; then
- echo " Usage: pnd_make.sh -p your.pnd -d folder/containing/your/app/ -x
- your.pxml (or \"guess\" to try to generate it from the folder) -i icon.png"
+
+# Probe if required variables were set
+echo -e
+cecho "Checking if all required variables were set." $green
+if [ ! $PNDNAME ] || [ ! $FOLDER ] || [ ! $PXML ];
+then
+ echo -e
+ cecho "ERROR: Not all required options were set! Please see the --help information below." $red
+ echo -e
+ print_help
exit 1
+else
+ echo "PNDNAME set to '$PNDNAME'."
+fi
+# Check if the selected folder actually exists
+if [ ! -d $FOLDER ];
+then
+ echo -e
+ cecho "ERROR: '$FOLDER' doesn't exist or is not a folder." $red
+ exit 1
+else
+ echo "FOLDER set to '$FOLDER'."
+fi
+# Check if the selected PXML file actually exists
+if [ ! -f $PXML ];
+then
+ echo -e
+ cecho "ERROR: '$PXML' doesn't exist or is not a file." $red
+ exit 1
+else
+ if [ $PXML_ALREADY_EXISTING ];
+ then
+ echo "You have not explicitly specified a PXML to use, but an existing file was
+found. Will be using this one."
+ elif [ $PXML_GENERATED ];
+ then
+ echo "A PXML file was generated for you using '$GENPXML_PATH'. This file will
+not be removed at the end of this script because you might want to review it, adjust
+single entries and rerun the script to generate a pnd with a PXML file with all the
+information you want to have listed."
+ fi
+ echo "PXML set to '$PXML'."
fi
-if [ ! -d $FOLDER ]; then echo "$FOLDER doesnt exist"; exit 1; fi #check if folder actually exists
-if [ ! -f $PXML ]; then echo "$PXML doesnt exist"; exit 1; fi #check if pxml actually exists
-#make iso from folder
-if [ ! $SQUASH ]; then
- mkisofs -o $PNDNAME.iso -R $FOLDER
+# Print the other variables:
+if [ $ICON ];
+then
+ if [ ! -f $ICON ]
+ then
+ cecho "WARNING: '$ICON' doesn't exist, will not append the selected icon to the pnd." $red
+ else
+ echo "ICON set to '$ICON'."
+ USE_ICON="true"
+ fi
+fi
+if [ $SQUASH ];
+then
+ echo "Will use a squashfs for '$PNDNAME'."
+fi
+
+
+# Validate the PXML file (if xmllint is available)
+# Errors and problems in this section will be shown but are not fatal.
+echo -e
+cecho "Trying to validate '$PXML' now. Will be using '$PXML_schema' to do so." $green
+which xmllint &> /dev/null
+if [ "$?" -ne "0" ];
+then
+ VALIDATED=false
+ cecho "WARNING: Could not find 'xmllint'. Validity check of '$PXML' is not possible!" $red
else
- if [ $(mksquashfs -version | awk '{if ($3 >= 4) print 1}') = 1 ]; then
- echo "your squashfs version is older then version 4, please upgrade to 4.0 or later"
+ if [ ! -f "$PXML_schema" ];
+ then
+ VALIDATED=false
+ cecho "WARNING: Could not find '$PXML_schema'. If you want to validate your
+PXML file please make sure to provide a schema using the --schema option." $red
+ else
+ xmllint --noout --schema $PXML_schema $PXML
+ if [ "$?" -ne "0" ]; then VALIDATED=false; else VALIDATED=true; fi
+ fi
+fi
+# Print some message at the end about the validation in case the user missed the output above
+if [ $VALIDATED = "false" ]
+then
+ cecho "WARNING: Could not successfully validate '$PXML'. Please check the output
+above. This does not mean that your pnd will be broken. Either you are not following the strict
+syntax required for validation or you don't have all files/programs required for validating." $red
+else
+ cecho "Your file '$PXML' was validated successfully. The resulting pnd should
+work nicely with libpnd." $green
+fi
+
+
+# Make iso from folder
+echo -e
+cecho "Creating an iso file based on '$FOLDER'." $green
+if [ $SQUASH ];
+then
+ check_for_tool mksquashfs
+ if [ $(mksquashfs -version | awk 'BEGIN{r=0} $3>=4{r=1} END{print r}') -eq 0 ];
+ then
+ cecho "ERROR: Your squashfs version is older then version 4, please upgrade to 4.0 or later" $red
exit 1
fi
- mksquashfs -no-recovery -nopad $FOLDER $PNDNAME.iso
+ mksquashfs $FOLDER $PNDNAME.iso -nopad -no-recovery
+else
+ check_for_tool mkisofs
+ mkisofs -o $PNDNAME.iso -R $FOLDER
+fi
+
+# Check that the iso file was actually created before continuing
+if [ ! -f $PNDNAME.iso ];
+then
+ cecho "ERROR: The temporary file '$PNDNAME.iso' could not be created.
+Please check the output above for any errors and retry after fixing them. Aborting." $red
+ exit 1
fi
-#append pxml to iso
-cat $PNDNAME.iso $PXML > $PNDNAME
+
+
+# Append pxml to iso
+echo -e
+cecho "Appending '$PXML' to the created iso file." $green
+cat $PNDNAME.iso $PXML > $PNDNAME
rm $PNDNAME.iso #cleanup
-#append icon if specified
-if [ $ICON ]; then # check if we want to add an icon
- if [ ! -f $ICON ]; then #does the icon actually exist?
- echo "$ICON doesnt exist"
- else # yes
+
+# Append icon if specified and available
+if [ $USE_ICON ];
+then
+ echo -e
+ cecho "Appending the icon '$ICON' to the pnd." $green
mv $PNDNAME $PNDNAME.tmp
cat $PNDNAME.tmp $ICON > $PNDNAME # append icon
rm $PNDNAME.tmp #cleanup
- fi
fi
-if [ $PXML = "guess" ];then rm $FOLDER/PXML.xml; fi #cleanup
+
+# Final message
+echo -e
+if [ -f $PNDNAME ];
+then
+ cecho "Successfully finished creating the pnd '$PNDNAME'." $green
+else
+ cecho "There seems to have been a problem and '$PNDNAME' was not created. Please check
+the output above for any error messages. A possible cause for this is that there was
+not enough space available." $red
+ exit 1
+fi
+
+
+#if [ $PXML = "guess" ];then rm $FOLDER/PXML.xml; fi #cleanup
diff --git a/backends/platform/openpandora/build/runscummvm.sh b/backends/platform/openpandora/build/runscummvm.sh
index 48d24a2b81..9c9d8362cb 100755
--- a/backends/platform/openpandora/build/runscummvm.sh
+++ b/backends/platform/openpandora/build/runscummvm.sh
@@ -11,4 +11,4 @@ mkdir saves
mkdir runtime
cd runtime
-../bin/scummvm --fullscreen --gfx-mode=2x --config=../scummvm.config
+../bin/scummvm --fullscreen --gfx-mode=2x --config=../scummvm.config --themepath=../data
diff --git a/backends/platform/openpandora/op-backend.cpp b/backends/platform/openpandora/op-backend.cpp
index 5231e9790d..dcec387f97 100644
--- a/backends/platform/openpandora/op-backend.cpp
+++ b/backends/platform/openpandora/op-backend.cpp
@@ -49,7 +49,7 @@
#include <limits.h>
#include <errno.h>
#include <sys/stat.h>
-#include <time.h> // for getTimeAndDate()
+#include <time.h> // for getTimeAndDate()
/* Dump console info to files. */
#define DUMP_STDOUT
@@ -97,7 +97,7 @@ void OSystem_OP::initBackend() {
// if (_mixer == 0) {
// _mixerManager = new DoubleBufferSDLMixerManager();
- // Setup and start mixer
+ // Setup and start mixer
// _mixerManager->init();
// }
@@ -123,49 +123,49 @@ void OSystem_OP::initBackend() {
_savefileManager = new DefaultSaveFileManager(savePath);
- #ifdef DUMP_STDOUT
- // The OpenPandora has a serial console on the EXT connection but most users do not use this so we
- // output all our STDOUT and STDERR to files for debug purposes.
- char STDOUT_FILE[PATH_MAX+1];
- char STDERR_FILE[PATH_MAX+1];
-
- strcpy(STDOUT_FILE, workDirName);
- strcpy(STDERR_FILE, workDirName);
- strcat(STDOUT_FILE, "/scummvm.stdout.txt");
- strcat(STDERR_FILE, "/scummvm.stderr.txt");
-
- // Flush the output in case anything is queued
- fclose(stdout);
- fclose(stderr);
-
- // Redirect standard input and standard output
- FILE *newfp = freopen(STDOUT_FILE, "w", stdout);
- if (newfp == NULL) {
- #if !defined(stdout)
- stdout = fopen(STDOUT_FILE, "w");
- #else
- newfp = fopen(STDOUT_FILE, "w");
- if (newfp) {
- *stdout = *newfp;
- }
- #endif
+#ifdef DUMP_STDOUT
+ // The OpenPandora has a serial console on the EXT connection but most users do not use this so we
+ // output all our STDOUT and STDERR to files for debug purposes.
+ char STDOUT_FILE[PATH_MAX+1];
+ char STDERR_FILE[PATH_MAX+1];
+
+ strcpy(STDOUT_FILE, workDirName);
+ strcpy(STDERR_FILE, workDirName);
+ strcat(STDOUT_FILE, "/scummvm.stdout.txt");
+ strcat(STDERR_FILE, "/scummvm.stderr.txt");
+
+ // Flush the output in case anything is queued
+ fclose(stdout);
+ fclose(stderr);
+
+ // Redirect standard input and standard output
+ FILE *newfp = freopen(STDOUT_FILE, "w", stdout);
+ if (newfp == NULL) {
+#if !defined(stdout)
+ stdout = fopen(STDOUT_FILE, "w");
+#else
+ newfp = fopen(STDOUT_FILE, "w");
+ if (newfp) {
+ *stdout = *newfp;
}
+#endif
+ }
- newfp = freopen(STDERR_FILE, "w", stderr);
- if (newfp == NULL) {
- #if !defined(stderr)
- stderr = fopen(STDERR_FILE, "w");
- #else
- newfp = fopen(STDERR_FILE, "w");
- if (newfp) {
- *stderr = *newfp;
- }
- #endif
+ newfp = freopen(STDERR_FILE, "w", stderr);
+ if (newfp == NULL) {
+#if !defined(stderr)
+ stderr = fopen(STDERR_FILE, "w");
+#else
+ newfp = fopen(STDERR_FILE, "w");
+ if (newfp) {
+ *stderr = *newfp;
}
+#endif
+ }
- setbuf(stderr, NULL);
- printf("%s\n", "Debug: STDOUT and STDERR redirected to text files.");
- #endif /* DUMP_STDOUT */
+ setbuf(stderr, NULL);
+ printf("%s\n", "Debug: STDOUT and STDERR redirected to text files.");
+#endif /* DUMP_STDOUT */
/* Trigger autosave every 4 minutes. */
ConfMan.registerDefault("autosave_period", 4 * 60);
@@ -187,7 +187,7 @@ void OSystem_OP::initBackend() {
_inited = true;
}
- // enable joystick
+// enable joystick
// if (joystick_num > -1 && SDL_NumJoysticks() > 0) {
// printf("Using joystick: %s\n", SDL_JoystickName(0));
// _joystick = SDL_JoystickOpen(joystick_num);
@@ -195,13 +195,13 @@ void OSystem_OP::initBackend() {
//
// setupMixer();
- // Note: We could implement a custom SDLTimerManager by using
- // SDL_AddTimer. That might yield better timer resolution, but it would
- // also change the semantics of a timer: Right now, ScummVM timers
- // *never* run in parallel, due to the way they are implemented. If we
- // switched to SDL_AddTimer, each timer might run in a separate thread.
- // However, not all our code is prepared for that, so we can't just
- // switch. Still, it's a potential future change to keep in mind.
+// Note: We could implement a custom SDLTimerManager by using
+// SDL_AddTimer. That might yield better timer resolution, but it would
+// also change the semantics of a timer: Right now, ScummVM timers
+// *never* run in parallel, due to the way they are implemented. If we
+// switched to SDL_AddTimer, each timer might run in a separate thread.
+// However, not all our code is prepared for that, so we can't just
+// switch. Still, it's a potential future change to keep in mind.
// _timer = new DefaultTimerManager();
// _timerID = SDL_AddTimer(10, &timer_handler, _timer);
@@ -217,9 +217,9 @@ void OSystem_OP::initSDL() {
if (SDL_Init(sdlFlags) == -1)
error("Could not initialize SDL: %s", SDL_GetError());
- uint8_t hiddenCursorData = 0;
+ uint8_t hiddenCursorData = 0;
- hiddenCursor = SDL_CreateCursor(&hiddenCursorData, &hiddenCursorData, 8, 1, 0, 0);
+ hiddenCursor = SDL_CreateCursor(&hiddenCursorData, &hiddenCursorData, 8, 1, 0, 0);
/* On the OpenPandora we need to work around an SDL assumption that
returns relative mouse coordinates when you get to the screen
@@ -277,11 +277,11 @@ void OSystem_OP::quit() {
SDL_FreeCursor(hiddenCursor);
- #ifdef DUMP_STDOUT
- printf("%s\n", "Debug: STDOUT and STDERR text files closed.");
- fclose(stdout);
- fclose(stderr);
- #endif /* DUMP_STDOUT */
+#ifdef DUMP_STDOUT
+ printf("%s\n", "Debug: STDOUT and STDERR text files closed.");
+ fclose(stdout);
+ fclose(stderr);
+#endif /* DUMP_STDOUT */
OSystem_POSIX::quit();
}
diff --git a/backends/platform/openpandora/op-bundle.mk b/backends/platform/openpandora/op-bundle.mk
index 163f4711ce..089430f43c 100755
--- a/backends/platform/openpandora/op-bundle.mk
+++ b/backends/platform/openpandora/op-bundle.mk
@@ -75,11 +75,10 @@ endif
$(CP) $(libloc)/../arm-angstrom-linux-gnueabi/usr/lib/libFLAC.so.8.2.0 $(bundle_name)/scummvm/lib/libFLAC.so.8
- $(srcdir)/backends/platform/openpandora/build/pnd_make.sh -p $(bundle_name).pnd -d $(bundle_name)/scummvm -x $(bundle_name)/scummvm/data/PXML.xml -i $(bundle_name)/scummvm/icon/scummvm.png
+ $(srcdir)/backends/platform/openpandora/build/pnd_make.sh -p $(bundle_name).pnd -c -d $(bundle_name)/scummvm -x $(bundle_name)/scummvm/data/PXML.xml -i $(bundle_name)/scummvm/icon/scummvm.png
$(CP) $(srcdir)/backends/platform/openpandora/build/README-PND.txt $(bundle_name)
tar -cvjf $(bundle_name)-pnd.tar.bz2 $(bundle_name).pnd $(bundle_name)/README-PND.txt
rm -R ./$(bundle_name)
-# rm $(bundle_name).pnd
.PHONY: op-bundle op-pnd
diff --git a/backends/platform/openpandora/op-main.cpp b/backends/platform/openpandora/op-main.cpp
index bb359e7204..ebe018f570 100644
--- a/backends/platform/openpandora/op-main.cpp
+++ b/backends/platform/openpandora/op-main.cpp
@@ -43,7 +43,7 @@ int main(int argc, char *argv[]) {
int res = scummvm_main(argc, argv);
// Free OSystem
- delete (OSystem_OP *)g_system;
+ delete(OSystem_OP *)g_system;
return res;
}
diff --git a/backends/platform/openpandora/op-options.cpp b/backends/platform/openpandora/op-options.cpp
index c60ba58cc7..58f0fb7188 100644
--- a/backends/platform/openpandora/op-options.cpp
+++ b/backends/platform/openpandora/op-options.cpp
@@ -31,9 +31,9 @@ namespace OP {
enum {
/* Touchscreen TapMode */
- TAPMODE_LEFT = 0,
- TAPMODE_RIGHT = 1,
- TAPMODE_HOVER = 2
+ TAPMODE_LEFT = 0,
+ TAPMODE_RIGHT = 1,
+ TAPMODE_HOVER = 2
};
int tapmodeLevel = TAPMODE_LEFT;
@@ -47,7 +47,7 @@ void ToggleTapMode() {
tapmodeLevel = TAPMODE_LEFT;
} else {
tapmodeLevel = TAPMODE_LEFT;
- }
+ }
}
} /* namespace OP */
diff --git a/backends/platform/openpandora/op-options.h b/backends/platform/openpandora/op-options.h
index ebc83ca00c..919d217f4b 100644
--- a/backends/platform/openpandora/op-options.h
+++ b/backends/platform/openpandora/op-options.h
@@ -32,7 +32,7 @@ namespace OP {
extern int tapmodeLevel;
-extern void ToggleTapMode();
+extern void ToggleTapMode();
} /* namespace OP */
diff --git a/backends/platform/openpandora/op-sdl.h b/backends/platform/openpandora/op-sdl.h
index d493c3957c..8cccbb5f86 100644
--- a/backends/platform/openpandora/op-sdl.h
+++ b/backends/platform/openpandora/op-sdl.h
@@ -34,7 +34,7 @@
//#define MIXER_DOUBLE_BUFFERING 1
#ifndef PATH_MAX
- #define PATH_MAX 255
+#define PATH_MAX 255
#endif
class OSystem_OP : public OSystem_POSIX {
diff --git a/backends/platform/ps2/DmaPipe.h b/backends/platform/ps2/DmaPipe.h
index fd8f55c154..c99da1c395 100644
--- a/backends/platform/ps2/DmaPipe.h
+++ b/backends/platform/ps2/DmaPipe.h
@@ -64,4 +64,3 @@ private:
};
#endif //__DMAPIPE_H__
-
diff --git a/backends/platform/ps2/Gs2dScreen.cpp b/backends/platform/ps2/Gs2dScreen.cpp
index 332b2a3c03..ddc1bdf668 100644
--- a/backends/platform/ps2/Gs2dScreen.cpp
+++ b/backends/platform/ps2/Gs2dScreen.cpp
@@ -816,5 +816,3 @@ const uint32 Gs2dScreen::_binaryClut[16] __attribute__((aligned(64))) = {
GS_RGBA(0xFF, 0xFF, 0xFF, 0x80), GS_RGBA(0xFF, 0xFF, 0xFF, 0x80),
GS_RGBA(0xFF, 0xFF, 0xFF, 0x80), GS_RGBA(0xFF, 0xFF, 0xFF, 0x80)
};
-
-
diff --git a/backends/platform/ps2/Makefile.gdb b/backends/platform/ps2/Makefile.gdb
index 1e2510d3f4..8ca47cd9f1 100644
--- a/backends/platform/ps2/Makefile.gdb
+++ b/backends/platform/ps2/Makefile.gdb
@@ -102,4 +102,3 @@ all: $(TARGET)
$(TARGET): $(OBJS)
$(LD) $^ $(LDFLAGS) -o $@
-
diff --git a/backends/platform/ps2/Makefile.ps2 b/backends/platform/ps2/Makefile.ps2
index 77cc735c5f..d6ce08ae84 100644
--- a/backends/platform/ps2/Makefile.ps2
+++ b/backends/platform/ps2/Makefile.ps2
@@ -105,4 +105,3 @@ all: $(TARGET)
$(TARGET): $(OBJS)
$(LD) $^ $(LDFLAGS) -o $@
-
diff --git a/backends/platform/ps2/asyncfio.cpp b/backends/platform/ps2/asyncfio.cpp
index d3d8eb65c7..3f20349107 100644
--- a/backends/platform/ps2/asyncfio.cpp
+++ b/backends/platform/ps2/asyncfio.cpp
@@ -237,4 +237,3 @@ bool AsyncFio::fioAvail(void) {
}
return retVal;
}
-
diff --git a/backends/platform/ps2/asyncfio.h b/backends/platform/ps2/asyncfio.h
index 26ee3f63dd..31684d4349 100644
--- a/backends/platform/ps2/asyncfio.h
+++ b/backends/platform/ps2/asyncfio.h
@@ -50,4 +50,3 @@ private:
volatile int * volatile _runningOp;
volatile int _ioSlots[MAX_HANDLES];
};
-
diff --git a/backends/platform/ps2/eecodyvdfs.c b/backends/platform/ps2/eecodyvdfs.c
index e9d4bc6a5c..f410b0c8ec 100644
--- a/backends/platform/ps2/eecodyvdfs.c
+++ b/backends/platform/ps2/eecodyvdfs.c
@@ -63,5 +63,3 @@ int driveStandby(void) {
driveStopped = 0;
return *(int *)sbuff;
}
-
-
diff --git a/backends/platform/ps2/eecodyvdfs.h b/backends/platform/ps2/eecodyvdfs.h
index 4b383795c7..1d43fb662f 100644
--- a/backends/platform/ps2/eecodyvdfs.h
+++ b/backends/platform/ps2/eecodyvdfs.h
@@ -49,4 +49,3 @@ extern "C" {
#endif
#endif
-
diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/cdtypes.h b/backends/platform/ps2/iop/CoDyVDfs/iop/cdtypes.h
index ebf57328dd..ad86631cfd 100644
--- a/backends/platform/ps2/iop/CoDyVDfs/iop/cdtypes.h
+++ b/backends/platform/ps2/iop/CoDyVDfs/iop/cdtypes.h
@@ -131,4 +131,3 @@ typedef struct {
} ISOPvd __attribute__ ((packed)); // 0x800
#endif // __CDTYPES_H__
-
diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.c b/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.c
index 77a5b93720..e55e62853b 100644
--- a/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.c
+++ b/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.c
@@ -344,4 +344,3 @@ int strnicmp(const char *s1, const char *s2, int n) {
}
return 0;
}
-
diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.h b/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.h
index 902065f385..b9f1edc194 100644
--- a/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.h
+++ b/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.h
@@ -81,4 +81,3 @@ int checkDiscReady(int retries);
int strnicmp(const char *s1, const char *s2, int n);
#endif // __MYCDVDFS_H__
-
diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.c b/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.c
index 8aecece3d9..f0a06f927b 100644
--- a/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.c
+++ b/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.c
@@ -262,4 +262,3 @@ int cd_dclose(iop_file_t *handle) {
hd->size = hd->lba = 0;
return 0;
}
-
diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.h b/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.h
index d0aa9533f2..db942b0b7e 100644
--- a/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.h
+++ b/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.h
@@ -34,4 +34,3 @@ int cd_dread(iop_file_t *handle, fio_dirent_t *buf);
int cd_dclose(iop_file_t *handle);
#endif // __FIOFS_H__
-
diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/imports.lst b/backends/platform/ps2/iop/CoDyVDfs/iop/imports.lst
index eb85e04462..4950bf8ced 100644
--- a/backends/platform/ps2/iop/CoDyVDfs/iop/imports.lst
+++ b/backends/platform/ps2/iop/CoDyVDfs/iop/imports.lst
@@ -61,5 +61,3 @@ I_StartThread
I_GetThreadId
I_DelayThread
thbase_IMPORTS_end
-
-
diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/rpcfs.c b/backends/platform/ps2/iop/CoDyVDfs/iop/rpcfs.c
index 3e45a5ff3d..5b760faa06 100644
--- a/backends/platform/ps2/iop/CoDyVDfs/iop/rpcfs.c
+++ b/backends/platform/ps2/iop/CoDyVDfs/iop/rpcfs.c
@@ -111,5 +111,3 @@ void *rpcServer(int func, void *data, int size) {
}
return NULL;
}
-
-
diff --git a/backends/platform/ps2/iop/rpckbd/src/imports.lst b/backends/platform/ps2/iop/rpckbd/src/imports.lst
index 41e13e6e73..e9ba01e020 100644
--- a/backends/platform/ps2/iop/rpckbd/src/imports.lst
+++ b/backends/platform/ps2/iop/rpckbd/src/imports.lst
@@ -55,4 +55,3 @@ I_UsbSetDevicePrivateData
I_UsbTransfer
I_UsbRegisterDriver
usbd_IMPORTS_end
-
diff --git a/backends/platform/ps2/irxboot.cpp b/backends/platform/ps2/irxboot.cpp
index 5072e8a52c..aa904d4f5b 100644
--- a/backends/platform/ps2/irxboot.cpp
+++ b/backends/platform/ps2/irxboot.cpp
@@ -210,4 +210,3 @@ int loadIrxModules(int device, const char *irxPath, IrxReference **modules) {
sioprintf("%s\n", resModules[i].path);
return curModule - resModules;
}
-
diff --git a/backends/platform/ps2/irxboot.h b/backends/platform/ps2/irxboot.h
index ef1bfb1256..81b47a37c6 100644
--- a/backends/platform/ps2/irxboot.h
+++ b/backends/platform/ps2/irxboot.h
@@ -84,4 +84,3 @@ struct IrxReference {
int loadIrxModules(int device, const char *irxPath, IrxReference **modules);
#endif // __IRXBOOT_H__
-
diff --git a/backends/platform/ps2/ps2debug.cpp b/backends/platform/ps2/ps2debug.cpp
index 1fc3d50170..300e18316f 100644
--- a/backends/platform/ps2/ps2debug.cpp
+++ b/backends/platform/ps2/ps2debug.cpp
@@ -44,4 +44,3 @@ void sioprintf(const char *zFormat, ...) {
pos++;
}
}
-
diff --git a/backends/platform/ps2/ps2debug.h b/backends/platform/ps2/ps2debug.h
index 127032ae80..02831e0623 100644
--- a/backends/platform/ps2/ps2debug.h
+++ b/backends/platform/ps2/ps2debug.h
@@ -28,4 +28,3 @@
void sioprintf(const char *zFormat, ...);
#endif // __PS2DEBUG_H__
-
diff --git a/backends/platform/ps2/ps2input.cpp b/backends/platform/ps2/ps2input.cpp
index 07104a6d97..6f36c5ff90 100644
--- a/backends/platform/ps2/ps2input.cpp
+++ b/backends/platform/ps2/ps2input.cpp
@@ -545,5 +545,3 @@ const Common::KeyCode Ps2Input::_padFlags[16] = {
Common::KEYCODE_INVALID, // Cross
Common::KEYCODE_INVALID // Square
};
-
-
diff --git a/backends/platform/ps2/ps2input.h b/backends/platform/ps2/ps2input.h
index c5d2f5b840..b97daac042 100644
--- a/backends/platform/ps2/ps2input.h
+++ b/backends/platform/ps2/ps2input.h
@@ -61,4 +61,3 @@ private:
};
#endif // __PS2INPUT_H__
-
diff --git a/backends/platform/ps2/ps2mutex.cpp b/backends/platform/ps2/ps2mutex.cpp
index 75b3a15482..5b30fa7862 100644
--- a/backends/platform/ps2/ps2mutex.cpp
+++ b/backends/platform/ps2/ps2mutex.cpp
@@ -97,4 +97,3 @@ void OSystem_PS2::deleteMutex(MutexRef mutex) {
sysMutex->sema = -1;
SignalSema(_mutexSema);
}
-
diff --git a/backends/platform/ps2/ps2pad.cpp b/backends/platform/ps2/ps2pad.cpp
index 00512c40c3..eeb9dfbd93 100644
--- a/backends/platform/ps2/ps2pad.cpp
+++ b/backends/platform/ps2/ps2pad.cpp
@@ -148,5 +148,3 @@ void Ps2Pad::readPad(uint16 *pbuttons, int16 *joyh, int16 *joyv) {
*pbuttons = 0;
}
}
-
-
diff --git a/backends/platform/ps2/ps2pad.h b/backends/platform/ps2/ps2pad.h
index 16c7c796d3..aebb3c6339 100644
--- a/backends/platform/ps2/ps2pad.h
+++ b/backends/platform/ps2/ps2pad.h
@@ -63,4 +63,3 @@ private:
};
#endif //__PS2PAD_H__
-
diff --git a/backends/platform/ps2/rpckbd.c b/backends/platform/ps2/rpckbd.c
index 0d37e4cfcb..0bb45208f5 100644
--- a/backends/platform/ps2/rpckbd.c
+++ b/backends/platform/ps2/rpckbd.c
@@ -175,4 +175,3 @@ int PS2KbdResetKeymap(void)
} else
return -1;
}
-
diff --git a/backends/platform/ps2/rpckbd.h b/backends/platform/ps2/rpckbd.h
index bc94cddf1b..bffd8e5be5 100644
--- a/backends/platform/ps2/rpckbd.h
+++ b/backends/platform/ps2/rpckbd.h
@@ -47,4 +47,3 @@ extern "C" {
#endif
#endif
-
diff --git a/backends/platform/ps2/sdlkeys.h b/backends/platform/ps2/sdlkeys.h
index b2f783cedd..791b1eb190 100644
--- a/backends/platform/ps2/sdlkeys.h
+++ b/backends/platform/ps2/sdlkeys.h
@@ -260,5 +260,3 @@ enum SdlKeyCodes {
};
#endif
-
-
diff --git a/backends/platform/ps2/systemps2.cpp b/backends/platform/ps2/systemps2.cpp
index d3acd06089..c75d7493a2 100644
--- a/backends/platform/ps2/systemps2.cpp
+++ b/backends/platform/ps2/systemps2.cpp
@@ -66,7 +66,7 @@
#include "engines/engine.h"
-#include "graphics/font.h"
+#include "graphics/fonts/bdf.h"
#include "graphics/surface.h"
#include "icon.h"
@@ -96,7 +96,7 @@ OSystem_PS2 *g_systemPs2;
#define FOREVER 2147483647
namespace Graphics {
- extern const NewFont g_sysfont;
+ extern const BdfFont g_sysfont;
};
PS2Device detectBootPath(const char *elfPath, char *bootPath);
diff --git a/backends/platform/psp/Makefile b/backends/platform/psp/Makefile
index 899bf37e80..7f4f20446e 100644
--- a/backends/platform/psp/Makefile
+++ b/backends/platform/psp/Makefile
@@ -201,4 +201,3 @@ SCEkxploit: $(TARGET).elf $(PSP_EBOOT_SFO)
$(PACK_PBP) "%__SCE__$(TARGET)/$(PSP_EBOOT)" $(PSP_EBOOT_SFO) $(PSP_EBOOT_ICON) \
$(PSP_EBOOT_ICON1) $(PSP_EBOOT_PIC0) $(PSP_EBOOT_PIC1) \
$(PSP_EBOOT_SND0) NULL $(PSP_EBOOT_PSAR)
-
diff --git a/backends/platform/psp/README.PSP b/backends/platform/psp/README.PSP
index dcfa30898c..bc0bd35a6e 100644
--- a/backends/platform/psp/README.PSP
+++ b/backends/platform/psp/README.PSP
@@ -1,4 +1,4 @@
-ScummVM-PSP 1.4.0git README
+ScummVM-PSP 1.5.0git README
==============================================================================
Installation
@@ -169,4 +169,3 @@ Joost Peters (joostp@scummvm.org)
Paolo Costabel (paoloc@pacbell.net)
Thomas Mayer (tommybear@internode.on.net)
Yotam Barnoy (yotambarnoy@gmail.com)
-
diff --git a/backends/platform/psp/README.PSP.in b/backends/platform/psp/README.PSP.in
index 978f8a60bd..1ee99db84b 100644
--- a/backends/platform/psp/README.PSP.in
+++ b/backends/platform/psp/README.PSP.in
@@ -169,4 +169,3 @@ Joost Peters (joostp@scummvm.org)
Paolo Costabel (paoloc@pacbell.net)
Thomas Mayer (tommybear@internode.on.net)
Yotam Barnoy (yotambarnoy@gmail.com)
-
diff --git a/backends/platform/psp/display_manager.cpp b/backends/platform/psp/display_manager.cpp
index e945dca4a8..cdb130e2a0 100644
--- a/backends/platform/psp/display_manager.cpp
+++ b/backends/platform/psp/display_manager.cpp
@@ -62,7 +62,9 @@ const OSystem::GraphicsMode DisplayManager::_supportedModes[] = {
// Class VramAllocator -----------------------------------
+namespace Common {
DECLARE_SINGLETON(VramAllocator);
+}
//#define __PSP_DEBUG_FUNCS__ /* For debugging the stack */
//#define __PSP_DEBUG_PRINT__
@@ -477,4 +479,3 @@ Common::List<Graphics::PixelFormat> DisplayManager::getSupportedPixelFormats() c
return list;
}
-
diff --git a/backends/platform/psp/dummy.cpp b/backends/platform/psp/dummy.cpp
index 748ac8cbf3..998ecf1488 100644
--- a/backends/platform/psp/dummy.cpp
+++ b/backends/platform/psp/dummy.cpp
@@ -53,4 +53,4 @@
getsockopt(0, 0, 0, NULL, NULL);
return i;
-} \ No newline at end of file
+}
diff --git a/backends/platform/psp/image_viewer.cpp b/backends/platform/psp/image_viewer.cpp
index 1ed7698bc8..98205ddee9 100644
--- a/backends/platform/psp/image_viewer.cpp
+++ b/backends/platform/psp/image_viewer.cpp
@@ -69,7 +69,7 @@ bool ImageViewer::load(int imageNum) {
assert(_renderer);
// Load a PNG into our buffer and palette. Size it by the actual size of the image
- PngLoader image(file, *_buffer, *_palette, Buffer::kSizeBySourceSize);
+ PngLoader image(*file, *_buffer, *_palette, Buffer::kSizeBySourceSize);
PngLoader::Status status = image.allocate(); // allocate the buffers for the file
@@ -321,4 +321,4 @@ void ImageViewer::handleEvent(uint32 event) {
PSP_ERROR("Unknown event %d\n", event);
break;
}
-} \ No newline at end of file
+}
diff --git a/backends/platform/psp/image_viewer.h b/backends/platform/psp/image_viewer.h
index ad188536a3..91a70b85cc 100644
--- a/backends/platform/psp/image_viewer.h
+++ b/backends/platform/psp/image_viewer.h
@@ -99,4 +99,4 @@ public:
void setDisplayManager(DisplayManager *displayManager) { _displayManager = displayManager; }
};
-#endif /* PSP_IMAGE_VIEWER_H */ \ No newline at end of file
+#endif /* PSP_IMAGE_VIEWER_H */
diff --git a/backends/platform/psp/input.cpp b/backends/platform/psp/input.cpp
index a9ad441b4d..5e20fb1e43 100644
--- a/backends/platform/psp/input.cpp
+++ b/backends/platform/psp/input.cpp
@@ -566,5 +566,3 @@ void InputHandler::setButtonsForImageViewer() {
_nub.getPad().getButton(ButtonPad::BTN_RIGHT, UNSHIFTED).setPspEvent(PSP_EVENT_IMAGE_VIEWER, ImageViewer::EVENT_MOVE_RIGHT,
PSP_EVENT_IMAGE_VIEWER, ImageViewer::EVENT_MOVE_STOP);
}
-
-
diff --git a/backends/platform/psp/memory.h b/backends/platform/psp/memory.h
index b5e29af634..5b728460fc 100644
--- a/backends/platform/psp/memory.h
+++ b/backends/platform/psp/memory.h
@@ -122,5 +122,3 @@ public:
};
#endif /* PSP_INCLUDE_SWAP */
-
-
diff --git a/backends/platform/psp/mp3.cpp b/backends/platform/psp/mp3.cpp
index 266e31e445..3dbf31112a 100644
--- a/backends/platform/psp/mp3.cpp
+++ b/backends/platform/psp/mp3.cpp
@@ -179,8 +179,7 @@ bool Mp3PspStream::loadStartAudioModule(const char *modname, int partition){
// TODO: make parallel function for unloading the 1.50 modules
Mp3PspStream::Mp3PspStream(Common::SeekableReadStream *inStream, DisposeAfterUse::Flag dispose) :
- _inStream(inStream),
- _disposeAfterUse(dispose),
+ _inStream(inStream, dispose),
_pcmLength(0),
_posInFrame(0),
_state(MP3_STATE_INIT),
@@ -274,9 +273,6 @@ Mp3PspStream::~Mp3PspStream() {
deinitStream();
releaseStreamME(); // free the memory used for this stream
-
- if (_disposeAfterUse == DisposeAfterUse::YES)
- delete _inStream;
}
void Mp3PspStream::deinitStream() {
diff --git a/backends/platform/psp/mp3.h b/backends/platform/psp/mp3.h
index 8b01fe4872..f7bfdda254 100644
--- a/backends/platform/psp/mp3.h
+++ b/backends/platform/psp/mp3.h
@@ -23,6 +23,7 @@
#ifndef SOUND_MP3_PSP_H
#define SOUND_MP3_PSP_H
+#include "common/ptr.h"
#include "common/types.h"
#include "common/scummsys.h"
@@ -48,8 +49,7 @@ protected:
byte _codecInBuffer[3072] __attribute__((aligned(64))); // the codec always needs alignment
unsigned long _codecParams[65]__attribute__((aligned(64))); // TODO: change to struct
- Common::SeekableReadStream *_inStream;
- DisposeAfterUse::Flag _disposeAfterUse;
+ Common::DisposablePtr<Common::SeekableReadStream> _inStream;
uint32 _pcmLength; // how many pcm samples we have for this type of file (x2 this for stereo)
diff --git a/backends/platform/psp/png_loader.cpp b/backends/platform/psp/png_loader.cpp
index 16377539c8..4de13d1e73 100644
--- a/backends/platform/psp/png_loader.cpp
+++ b/backends/platform/psp/png_loader.cpp
@@ -78,7 +78,7 @@ PngLoader::Status PngLoader::allocate() {
bool PngLoader::load() {
DEBUG_ENTER_FUNC();
// Try to load the image
- _file->seek(0); // Go back to start
+ _file.seek(0); // Go back to start
if (!loadImageIntoBuffer()) {
PSP_DEBUG_PRINT("failed to load image\n");
@@ -99,11 +99,9 @@ void PngLoader::warningFn(png_structp png_ptr, png_const_charp warning_msg) {
// Read function for png library to be able to read from our SeekableReadStream
//
void PngLoader::libReadFunc(png_structp pngPtr, png_bytep data, png_size_t length) {
- Common::SeekableReadStream *file;
+ Common::SeekableReadStream &file = *(Common::SeekableReadStream *)pngPtr->io_ptr;
- file = (Common::SeekableReadStream *)pngPtr->io_ptr;
-
- file->read(data, length);
+ file.read(data, length);
}
bool PngLoader::basicImageLoad() {
@@ -120,7 +118,7 @@ bool PngLoader::basicImageLoad() {
return false;
}
// Set the png lib to use our read function
- png_set_read_fn(_pngPtr, (void *)_file, libReadFunc);
+ png_set_read_fn(_pngPtr, &_file, libReadFunc);
unsigned int sig_read = 0;
diff --git a/backends/platform/psp/png_loader.h b/backends/platform/psp/png_loader.h
index 0ff9d8a65d..48a3220d78 100644
--- a/backends/platform/psp/png_loader.h
+++ b/backends/platform/psp/png_loader.h
@@ -34,7 +34,7 @@ private:
static void warningFn(png_structp png_ptr, png_const_charp warning_msg);
static void libReadFunc(png_structp pngPtr, png_bytep data, png_size_t length);
- Common::SeekableReadStream *_file;
+ Common::SeekableReadStream &_file;
Buffer *_buffer;
Palette *_palette;
@@ -57,7 +57,7 @@ public:
BAD_FILE
};
- PngLoader(Common::SeekableReadStream *file, Buffer &buffer, Palette &palette,
+ PngLoader(Common::SeekableReadStream &file, Buffer &buffer, Palette &palette,
Buffer::HowToSize sizeBy = Buffer::kSizeByTextureSize) :
_file(file), _buffer(&buffer), _palette(&palette),
_width(0), _height(0), _paletteSize(0),
diff --git a/backends/platform/psp/portdefs.h b/backends/platform/psp/portdefs.h
index feb0c944ee..e8a28b31e2 100644
--- a/backends/platform/psp/portdefs.h
+++ b/backends/platform/psp/portdefs.h
@@ -53,5 +53,3 @@
//#define printf pspDebugScreenPrintf
#endif /* PORTDEFS_H */
-
-
diff --git a/backends/platform/psp/powerman.cpp b/backends/platform/psp/powerman.cpp
index fe9dcfa673..b72d05809d 100644
--- a/backends/platform/psp/powerman.cpp
+++ b/backends/platform/psp/powerman.cpp
@@ -30,7 +30,9 @@
//#define __PSP_DEBUG_PRINT__
#include "backends/platform/psp/trace.h"
+namespace Common {
DECLARE_SINGLETON(PowerManager);
+}
// Function to debug the Power Manager (we have no output to screen)
inline void PowerManager::debugPM() {
diff --git a/backends/platform/psp/pspkeyboard.cpp b/backends/platform/psp/pspkeyboard.cpp
index 43c4cada15..66efe9145d 100644
--- a/backends/platform/psp/pspkeyboard.cpp
+++ b/backends/platform/psp/pspkeyboard.cpp
@@ -298,7 +298,7 @@ bool PSPKeyboard::load() {
goto ERROR;
}
- PngLoader image(file, _buffers[i], _palettes[i]);
+ PngLoader image(*file, _buffers[i], _palettes[i]);
if (image.allocate() != PngLoader::OK) {
PSP_ERROR("Failed to allocate memory for keyboard image %s\n", _guiStrings[i]);
diff --git a/backends/platform/psp/rtc.cpp b/backends/platform/psp/rtc.cpp
index 3d6d4295a6..cbbb7d3f80 100644
--- a/backends/platform/psp/rtc.cpp
+++ b/backends/platform/psp/rtc.cpp
@@ -34,7 +34,9 @@
// Class PspRtc ---------------------------------------------------------------
+namespace Common {
DECLARE_SINGLETON(PspRtc);
+}
void PspRtc::init() { // init our starting ticks
uint32 ticks[2];
@@ -81,4 +83,3 @@ uint32 PspRtc::getMicros() {
return ticks[0];
}
-
diff --git a/backends/platform/psp/thread.cpp b/backends/platform/psp/thread.cpp
index 5f38a54ab7..57370f7685 100644
--- a/backends/platform/psp/thread.cpp
+++ b/backends/platform/psp/thread.cpp
@@ -228,4 +228,3 @@ void PspCondition::wait(PspMutex &externalMutex) {
externalMutex.lock(); // must lock external mutex here for continuation
}
-
diff --git a/backends/platform/psp/thread.h b/backends/platform/psp/thread.h
index a2f3b5eda2..ca94b8c82c 100644
--- a/backends/platform/psp/thread.h
+++ b/backends/platform/psp/thread.h
@@ -105,5 +105,3 @@ enum StackSizes {
};
#endif /* PSP_THREADS_H */
-
-
diff --git a/backends/platform/psp/trace.cpp b/backends/platform/psp/trace.cpp
index b799b4e870..008b508b7e 100644
--- a/backends/platform/psp/trace.cpp
+++ b/backends/platform/psp/trace.cpp
@@ -148,4 +148,3 @@ void mipsBacktrace(uint32 levels, void **addresses) {
}
}
}
-
diff --git a/backends/platform/sdl/macosx/appmenu_osx.h b/backends/platform/sdl/macosx/appmenu_osx.h
new file mode 100755
index 0000000000..005414b789
--- /dev/null
+++ b/backends/platform/sdl/macosx/appmenu_osx.h
@@ -0,0 +1,32 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef APPMENU_OSX_H
+#define APPMENU_OSX_H
+
+#if defined(MACOSX)
+
+void replaceApplicationMenuItems();
+
+#endif // MACOSX
+
+#endif
diff --git a/backends/platform/sdl/macosx/appmenu_osx.mm b/backends/platform/sdl/macosx/appmenu_osx.mm
new file mode 100755
index 0000000000..bb089a6b61
--- /dev/null
+++ b/backends/platform/sdl/macosx/appmenu_osx.mm
@@ -0,0 +1,110 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+// Disable symbol overrides so that we can use system headers.
+#define FORBIDDEN_SYMBOL_ALLOW_ALL
+
+#include "backends/platform/sdl/macosx/appmenu_osx.h"
+#include "common/translation.h"
+
+#include <Cocoa/Cocoa.h>
+
+// Apple removed setAppleMenu from the header files in 10.4,
+// but as the method still exists we declare it ourselves here.
+// Yes, this works :)
+@interface NSApplication(MissingFunction)
+- (void)setAppleMenu:(NSMenu *)menu;
+@end
+
+void replaceApplicationMenuItems() {
+
+ // Code mainly copied and adapted from SDLmain.m
+ NSMenu *appleMenu;
+ NSMenu *windowMenu;
+ NSMenuItem *menuItem;
+
+ // For some reason [[NSApp mainMenu] removeAllItems] doesn't work and crashes, so we need
+ // to remove the SDL generated menus one by one
+ [[NSApp mainMenu] removeItemAtIndex:0]; // Remove application menu
+ [[NSApp mainMenu] removeItemAtIndex:0]; // Remove "Windows" menu
+
+ // Create new application menu
+ appleMenu = [[NSMenu alloc] initWithTitle:@""];
+
+ // Get current encoding
+#ifdef USE_TRANSLATION
+ NSStringEncoding stringEncoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((CFStringRef)[NSString stringWithCString:(TransMan.getCurrentCharset()).c_str() encoding:NSASCIIStringEncoding]));
+#else
+ NSStringEncoding stringEncoding = NSASCIIStringEncoding;
+#endif
+
+ // Add "About ScummVM" menu item
+ [appleMenu addItemWithTitle:[NSString stringWithCString:_("About ScummVM") encoding:stringEncoding] action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];
+
+ // Add separator
+ [appleMenu addItem:[NSMenuItem separatorItem]];
+
+ // Add "Hide ScummVM" menu item
+ [appleMenu addItemWithTitle:[NSString stringWithCString:_("Hide ScummVM") encoding:stringEncoding] action:@selector(hide:) keyEquivalent:@"h"];
+
+ // Add "Hide Others" menu item
+ menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:[NSString stringWithCString:_("Hide Others") encoding:stringEncoding] action:@selector(hideOtherApplications:) keyEquivalent:@"h"];
+ [menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
+
+ // Add "Show All" menu item
+ [appleMenu addItemWithTitle:[NSString stringWithCString:_("Show All") encoding:stringEncoding] action:@selector(unhideAllApplications:) keyEquivalent:@""];
+
+ // Add separator
+ [appleMenu addItem:[NSMenuItem separatorItem]];
+
+ // Add "Quit ScummVM" menu item
+ [appleMenu addItemWithTitle:[NSString stringWithCString:_("Quit ScummVM") encoding:stringEncoding] action:@selector(terminate:) keyEquivalent:@"q"];
+
+ // Put application menu into the menubar
+ menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
+ [menuItem setSubmenu:appleMenu];
+ [[NSApp mainMenu] addItem:menuItem];
+
+ // Tell the application object that this is now the application menu
+ [NSApp setAppleMenu:appleMenu];
+
+
+ // Create new "Window" menu
+ windowMenu = [[NSMenu alloc] initWithTitle:[NSString stringWithCString:_("Window") encoding:stringEncoding]];
+
+ // Add "Minimize" menu item
+ menuItem = [[NSMenuItem alloc] initWithTitle:[NSString stringWithCString:_("Minimize") encoding:stringEncoding] action:@selector(performMiniaturize:) keyEquivalent:@"m"];
+ [windowMenu addItem:menuItem];
+
+ // Put menu into the menubar
+ menuItem = [[NSMenuItem alloc] initWithTitle:[NSString stringWithCString:_("Window") encoding:stringEncoding] action:nil keyEquivalent:@""];
+ [menuItem setSubmenu:windowMenu];
+ [[NSApp mainMenu] addItem:menuItem];
+
+ // Tell the application object that this is now the window menu.
+ [NSApp setWindowsMenu:windowMenu];
+
+ // Finally give up our references to the objects
+ [appleMenu release];
+ [windowMenu release];
+ [menuItem release];
+}
diff --git a/backends/platform/sdl/macosx/macosx.cpp b/backends/platform/sdl/macosx/macosx.cpp
index 817f61e864..639bd980f6 100644
--- a/backends/platform/sdl/macosx/macosx.cpp
+++ b/backends/platform/sdl/macosx/macosx.cpp
@@ -29,9 +29,13 @@
#include "backends/platform/sdl/macosx/macosx.h"
#include "backends/mixer/doublebuffersdl/doublebuffersdl-mixer.h"
+#include "backends/platform/sdl/macosx/appmenu_osx.h"
+#include "backends/updates/macosx/macosx-updates.h"
#include "common/archive.h"
+#include "common/config-manager.h"
#include "common/fs.h"
+#include "common/translation.h"
#include "ApplicationServices/ApplicationServices.h" // for LSOpenFSRef
#include "CoreFoundation/CoreFoundation.h" // for CF* stuff
@@ -51,6 +55,20 @@ void OSystem_MacOSX::initBackend() {
_mixerManager->init();
}
+#ifdef USE_TRANSLATION
+ // We need to initialize the translataion manager here for the following
+ // call to replaceApplicationMenuItems() work correctly
+ TransMan.setLanguage(ConfMan.get("gui_language").c_str());
+#endif // USE_TRANSLATION
+
+ // Replace the SDL generated menu items with our own translated ones on Mac OS X
+ replaceApplicationMenuItems();
+
+#ifdef USE_SPARKLE
+ // Initialize updates manager
+ _updateManager = new MacOSXUpdateManager();
+#endif
+
// Invoke parent implementation of this method
OSystem_POSIX::initBackend();
}
@@ -100,4 +118,51 @@ bool OSystem_MacOSX::displayLogFile() {
return err != noErr;
}
+Common::String OSystem_MacOSX::getSystemLanguage() const {
+#if defined(USE_DETECTLANG) && defined(USE_TRANSLATION)
+ CFArrayRef availableLocalizations = CFBundleCopyBundleLocalizations(CFBundleGetMainBundle());
+ if (availableLocalizations) {
+ CFArrayRef preferredLocalizations = CFBundleCopyPreferredLocalizationsFromArray(availableLocalizations);
+ CFRelease(availableLocalizations);
+ if (preferredLocalizations) {
+ CFIndex localizationsSize = CFArrayGetCount(preferredLocalizations);
+ // Since we have a list of sorted preferred localization, I would like here to
+ // check that they are supported by the TranslationManager and take the first
+ // one that is supported. The listed localizations are taken from the Bundle
+ // plist file, so they should all be supported, unless the plist file is not
+ // synchronized with the translations.dat file. So this is not really a big
+ // issue. And because getSystemLanguage() is called from the constructor of
+ // TranslationManager (therefore before the instance pointer is set), calling
+ // TransMan here results in an infinite loop and creation of a lot of TransMan
+ // instances.
+ /*
+ for (CFIndex i = 0 ; i < localizationsSize ; ++i) {
+ CFStringRef language = (CFStringRef)CFArrayGetValueAtIndex(preferredLocalizations, i);
+ char buffer[10];
+ CFStringGetCString(language, buffer, 50, kCFStringEncodingASCII);
+ int32 languageId = TransMan.findMatchingLanguage(buffer);
+ if (languageId != -1) {
+ CFRelease(preferredLocalizations);
+ return TransMan.getLangById(languageId);
+ }
+ }
+ */
+ if (localizationsSize > 0) {
+ CFStringRef language = (CFStringRef)CFArrayGetValueAtIndex(preferredLocalizations, 0);
+ char buffer[10];
+ CFStringGetCString(language, buffer, 50, kCFStringEncodingASCII);
+ CFRelease(preferredLocalizations);
+ return buffer;
+ }
+ CFRelease(preferredLocalizations);
+ }
+
+ }
+ // Falback to POSIX implementation
+ return OSystem_POSIX::getSystemLanguage();
+#else // USE_DETECTLANG
+ return OSystem_POSIX::getSystemLanguage();
+#endif // USE_DETECTLANG
+}
+
#endif
diff --git a/backends/platform/sdl/macosx/macosx.h b/backends/platform/sdl/macosx/macosx.h
index 86c70297ec..4837e643b3 100644
--- a/backends/platform/sdl/macosx/macosx.h
+++ b/backends/platform/sdl/macosx/macosx.h
@@ -32,6 +32,8 @@ public:
virtual bool hasFeature(Feature f);
virtual bool displayLogFile();
+
+ virtual Common::String getSystemLanguage() const;
virtual void initBackend();
virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority = 0);
diff --git a/backends/platform/sdl/main.cpp b/backends/platform/sdl/main.cpp
index 1992bdd3f2..040028079d 100644
--- a/backends/platform/sdl/main.cpp
+++ b/backends/platform/sdl/main.cpp
@@ -26,7 +26,7 @@
// of this file. The following "#if" ensures that.
#if !defined(POSIX) && \
!defined(WIN32) && \
- !defined(__MAEMO__) && \
+ !defined(MAEMO) && \
!defined(__SYMBIAN32__) && \
!defined(_WIN32_WCE) && \
!defined(__amigaos4__) && \
@@ -34,6 +34,7 @@
!defined(CAANOO) && \
!defined(LINUXMOTO) && \
!defined(SAMSUNGTV) && \
+ !defined(PLAYSTATION3) && \
!defined(OPENPANDORA)
#include "backends/platform/sdl/sdl.h"
diff --git a/backends/platform/sdl/module.mk b/backends/platform/sdl/module.mk
index efc5168d5b..f1afe37349 100644
--- a/backends/platform/sdl/module.mk
+++ b/backends/platform/sdl/module.mk
@@ -14,7 +14,8 @@ endif
ifdef MACOSX
MODULE_OBJS += \
macosx/macosx-main.o \
- macosx/macosx.o
+ macosx/macosx.o \
+ macosx/appmenu_osx.o
endif
ifdef WIN32
@@ -29,6 +30,12 @@ MODULE_OBJS += \
amigaos/amigaos.o
endif
+ifdef PLAYSTATION3
+MODULE_OBJS += \
+ ps3/ps3-main.o \
+ ps3/ps3.o
+endif
+
# We don't use rules.mk but rather manually update OBJS and MODULE_DIRS.
MODULE_OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS))
OBJS := $(MODULE_OBJS) $(OBJS)
diff --git a/backends/platform/sdl/posix/posix-main.cpp b/backends/platform/sdl/posix/posix-main.cpp
index f78e001398..5f0914e04f 100644
--- a/backends/platform/sdl/posix/posix-main.cpp
+++ b/backends/platform/sdl/posix/posix-main.cpp
@@ -22,7 +22,7 @@
#include "common/scummsys.h"
-#if defined(POSIX) && !defined(MACOSX) && !defined(SAMSUNGTV) && !defined(WEBOS) && !defined(LINUXMOTO) && !defined(GPH_DEVICE) && !defined(GP2X) && !defined(DINGUX) && !defined(OPENPANDORA)
+#if defined(POSIX) && !defined(MACOSX) && !defined(SAMSUNGTV) && !defined(MAEMO) && !defined(WEBOS) && !defined(LINUXMOTO) && !defined(GPH_DEVICE) && !defined(GP2X) && !defined(DINGUX) && !defined(OPENPANDORA) && !defined(PLAYSTATION3)
#include "backends/platform/sdl/posix/posix.h"
#include "backends/plugins/sdl/sdl-provider.h"
diff --git a/backends/platform/sdl/ps3/ps3-main.cpp b/backends/platform/sdl/ps3/ps3-main.cpp
new file mode 100644
index 0000000000..ba548a3749
--- /dev/null
+++ b/backends/platform/sdl/ps3/ps3-main.cpp
@@ -0,0 +1,49 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/scummsys.h"
+
+#include "backends/platform/sdl/ps3/ps3.h"
+#include "backends/plugins/sdl/sdl-provider.h"
+#include "base/main.h"
+
+int main(int argc, char *argv[]) {
+
+ // Create our OSystem instance
+ g_system = new OSystem_PS3();
+ assert(g_system);
+
+ // Pre initialize the backend
+ ((OSystem_PS3 *)g_system)->init();
+
+#ifdef DYNAMIC_MODULES
+ PluginManager::instance().addPluginProvider(new SDLPluginProvider());
+#endif
+
+ // Invoke the actual ScummVM main entry point:
+ int res = scummvm_main(argc, argv);
+
+ // Free OSystem
+ delete (OSystem_PS3 *)g_system;
+
+ return res;
+}
diff --git a/backends/platform/sdl/ps3/ps3.cpp b/backends/platform/sdl/ps3/ps3.cpp
new file mode 100644
index 0000000000..33586ce693
--- /dev/null
+++ b/backends/platform/sdl/ps3/ps3.cpp
@@ -0,0 +1,94 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#define FORBIDDEN_SYMBOL_EXCEPTION_mkdir
+#define FORBIDDEN_SYMBOL_EXCEPTION_time_h // sys/stat.h includes sys/time.h
+#define FORBIDDEN_SYMBOL_EXCEPTION_unistd_h
+
+#include "common/scummsys.h"
+#include "common/config-manager.h"
+#include "backends/platform/sdl/ps3/ps3.h"
+#include "backends/graphics/surfacesdl/surfacesdl-graphics.h"
+#include "backends/saves/default/default-saves.h"
+#include "backends/fs/ps3/ps3-fs-factory.h"
+#include "backends/events/ps3sdl/ps3sdl-events.h"
+#include "backends/mixer/sdl13/sdl13-mixer.h"
+
+#include <dirent.h>
+#include <sys/stat.h>
+
+int access(const char *pathname, int mode) {
+ struct stat sb;
+
+ if (stat(pathname, &sb) == -1) {
+ return -1;
+ }
+
+ return 0;
+}
+
+OSystem_PS3::OSystem_PS3(Common::String baseConfigName)
+ : _baseConfigName(baseConfigName) {
+}
+
+void OSystem_PS3::init() {
+ // Initialze File System Factory
+ _fsFactory = new PS3FilesystemFactory();
+
+ // Invoke parent implementation of this method
+ OSystem_SDL::init();
+}
+
+void OSystem_PS3::initBackend() {
+ ConfMan.set("joystick_num", 0);
+ ConfMan.set("vkeybdpath", PREFIX "/data");
+ ConfMan.registerDefault("fullscreen", true);
+ ConfMan.registerDefault("aspect_ratio", true);
+
+ // Create the savefile manager
+ if (_savefileManager == 0)
+ _savefileManager = new DefaultSaveFileManager(PREFIX "/saves");
+
+ // Create the mixer manager
+ if (_mixer == 0) {
+ _mixerManager = new Sdl13MixerManager();
+
+ // Setup and start mixer
+ _mixerManager->init();
+ }
+
+ // Event source
+ if (_eventSource == 0)
+ _eventSource = new PS3SdlEventSource();
+
+ // Invoke parent implementation of this method
+ OSystem_SDL::initBackend();
+}
+
+Common::String OSystem_PS3::getDefaultConfigFileName() {
+ return PREFIX "/" + _baseConfigName;
+}
+
+Common::WriteStream *OSystem_PS3::createLogFile() {
+ Common::FSNode file(PREFIX "/scummvm.log");
+ return file.createWriteStream();
+}
diff --git a/backends/platform/sdl/ps3/ps3.h b/backends/platform/sdl/ps3/ps3.h
new file mode 100644
index 0000000000..daed7599a9
--- /dev/null
+++ b/backends/platform/sdl/ps3/ps3.h
@@ -0,0 +1,47 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef PLATFORM_SDL_PS3_H
+#define PLATFORM_SDL_PS3_H
+
+#include "backends/platform/sdl/sdl.h"
+
+class OSystem_PS3 : public OSystem_SDL {
+public:
+ // Let the subclasses be able to change _baseConfigName in the constructor
+ OSystem_PS3(Common::String baseConfigName = "scummvm.ini");
+ virtual ~OSystem_PS3() {}
+
+ virtual void init();
+ virtual void initBackend();
+
+protected:
+ // Base string for creating the default path and filename
+ // for the configuration file
+ Common::String _baseConfigName;
+
+ virtual Common::String getDefaultConfigFileName();
+
+ virtual Common::WriteStream *createLogFile();
+};
+
+#endif
diff --git a/backends/platform/sdl/sdl-sys.h b/backends/platform/sdl/sdl-sys.h
index 63bfc58617..ca3c586e03 100644
--- a/backends/platform/sdl/sdl-sys.h
+++ b/backends/platform/sdl/sdl-sys.h
@@ -27,7 +27,7 @@
// fashion, even on the Symbian port.
// Moreover, it contains a workaround for the fact that SDL_rwops.h uses
// a FILE pointer in one place, which conflicts with common/forbidden.h.
-
+// The SDL 1.3 headers also include strings.h
#include "common/scummsys.h"
@@ -39,6 +39,16 @@ typedef struct { int FAKE; } FAKE_FILE;
#define FILE FAKE_FILE
#endif
+#if !defined(FORBIDDEN_SYMBOL_ALLOW_ALL) && !defined(FORBIDDEN_SYMBOL_EXCEPTION_strcasecmp)
+#undef strcasecmp
+#define strcasecmp FAKE_strcasecmp
+#endif
+
+#if !defined(FORBIDDEN_SYMBOL_ALLOW_ALL) && !defined(FORBIDDEN_SYMBOL_EXCEPTION_strncasecmp)
+#undef strncasecmp
+#define strncasecmp FAKE_strncasecmp
+#endif
+
#if defined(__SYMBIAN32__)
#include <esdl\SDL.h>
#else
@@ -51,4 +61,15 @@ typedef struct { int FAKE; } FAKE_FILE;
#define FILE FORBIDDEN_SYMBOL_REPLACEMENT
#endif
+#if !defined(FORBIDDEN_SYMBOL_ALLOW_ALL) && !defined(FORBIDDEN_SYMBOL_EXCEPTION_strcasecmp)
+#undef strcasecmp
+#define strcasecmp FORBIDDEN_SYMBOL_REPLACEMENT
+#endif
+
+#if !defined(FORBIDDEN_SYMBOL_ALLOW_ALL) && !defined(FORBIDDEN_SYMBOL_EXCEPTION_strncasecmp)
+#undef strncasecmp
+#define strncasecmp FORBIDDEN_SYMBOL_REPLACEMENT
+#endif
+
+
#endif
diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp
index 3f85b1a564..8dff5cec05 100644
--- a/backends/platform/sdl/sdl.cpp
+++ b/backends/platform/sdl/sdl.cpp
@@ -35,13 +35,21 @@
#include "common/textconsole.h"
#include "backends/saves/default/default-saves.h"
+
+// Audio CD support was removed with SDL 1.3
+#if SDL_VERSION_ATLEAST(1, 3, 0)
+#include "backends/audiocd/default/default-audiocd.h"
+#else
#include "backends/audiocd/sdl/sdl-audiocd.h"
+#endif
+
#include "backends/events/sdl/sdl-events.h"
#include "backends/mutex/sdl/sdl-mutex.h"
#include "backends/timer/sdl/sdl-timer.h"
#include "backends/graphics/surfacesdl/surfacesdl-graphics.h"
#ifdef USE_OPENGL
#include "backends/graphics/openglsdl/openglsdl-graphics.h"
+#include "graphics/cursorman.h"
#endif
#include "icons/scummvm.xpm"
@@ -167,7 +175,7 @@ void OSystem_SDL::initBackend() {
// If the gfx_mode is from OpenGL, create the OpenGL graphics manager
if (use_opengl) {
- _graphicsManager = new OpenGLSdlGraphicsManager();
+ _graphicsManager = new OpenGLSdlGraphicsManager(_eventSource);
graphicsManagerType = 1;
}
}
@@ -188,8 +196,15 @@ void OSystem_SDL::initBackend() {
_mixerManager->init();
}
- if (_audiocdManager == 0)
+ if (_audiocdManager == 0) {
+ // Audio CD support was removed with SDL 1.3
+#if SDL_VERSION_ATLEAST(1, 3, 0)
+ _audiocdManager = new DefaultAudioCDManager();
+#else
_audiocdManager = new SdlAudioCDManager();
+#endif
+
+ }
// Setup a custom program icon.
setupIcon();
@@ -413,6 +428,7 @@ void OSystem_SDL::setupIcon() {
for (i = 0; i < ncols; i++) {
unsigned char code;
char color[32];
+ memset(color, 0, sizeof(color));
unsigned int col;
if (sscanf(scummvm_icon[1 + i], "%c c %s", &code, color) != 2) {
warning("Wrong format of scummvm_icon[%d] (%s)", 1 + i, scummvm_icon[1 + i]);
@@ -457,7 +473,8 @@ uint32 OSystem_SDL::getMillis() {
}
void OSystem_SDL::delayMillis(uint msecs) {
- SDL_Delay(msecs);
+ if (!g_eventRec.processDelayMillis(msecs))
+ SDL_Delay(msecs);
}
void OSystem_SDL::getTimeAndDate(TimeDate &td) const {
@@ -508,6 +525,22 @@ bool OSystem_SDL::setGraphicsMode(int mode) {
i = _sdlModesCount;
}
+ // Very hacky way to set up the old graphics manager state, in case we
+ // switch from SDL->OpenGL or OpenGL->SDL.
+ //
+ // This is a probably temporary workaround to fix bugs like #3368143
+ // "SDL/OpenGL: Crash when switching renderer backend".
+ const int screenWidth = _graphicsManager->getWidth();
+ const int screenHeight = _graphicsManager->getHeight();
+ const bool arState = _graphicsManager->getFeatureState(kFeatureAspectRatioCorrection);
+ const bool fullscreen = _graphicsManager->getFeatureState(kFeatureFullscreenMode);
+ const bool cursorPalette = _graphicsManager->getFeatureState(kFeatureCursorPalette);
+#ifdef USE_RGB_COLOR
+ const Graphics::PixelFormat pixelFormat = _graphicsManager->getScreenFormat();
+#endif
+
+ bool switchedManager = false;
+
// Loop through modes
while (srcMode->name) {
if (i == mode) {
@@ -519,16 +552,55 @@ bool OSystem_SDL::setGraphicsMode(int mode) {
_graphicsManager = new SurfaceSdlGraphicsManager(_eventSource);
((SurfaceSdlGraphicsManager *)_graphicsManager)->initEventObserver();
_graphicsManager->beginGFXTransaction();
+
+ switchedManager = true;
} else if (_graphicsMode < _sdlModesCount && mode >= _sdlModesCount) {
debug(1, "switching to OpenGL graphics");
delete _graphicsManager;
- _graphicsManager = new OpenGLSdlGraphicsManager();
+ _graphicsManager = new OpenGLSdlGraphicsManager(_eventSource);
((OpenGLSdlGraphicsManager *)_graphicsManager)->initEventObserver();
_graphicsManager->beginGFXTransaction();
+
+ switchedManager = true;
}
_graphicsMode = mode;
- return _graphicsManager->setGraphicsMode(srcMode->id);
+
+ if (switchedManager) {
+#ifdef USE_RGB_COLOR
+ _graphicsManager->initSize(screenWidth, screenHeight, &pixelFormat);
+#else
+ _graphicsManager->initSize(screenWidth, screenHeight, 0);
+#endif
+ _graphicsManager->setFeatureState(kFeatureAspectRatioCorrection, arState);
+ _graphicsManager->setFeatureState(kFeatureFullscreenMode, fullscreen);
+ _graphicsManager->setFeatureState(kFeatureCursorPalette, cursorPalette);
+
+ // Worst part about this right now, tell the cursor manager to
+ // resetup the cursor + cursor palette if necessarily
+
+ // First we need to try to setup the old state on the new manager...
+ if (_graphicsManager->endGFXTransaction() != kTransactionSuccess) {
+ // Oh my god if this failed the client code might just explode.
+ return false;
+ }
+
+ // Next setup the cursor again
+ CursorMan.pushCursor(0, 0, 0, 0, 0, 0);
+ CursorMan.popCursor();
+
+ // Next setup cursor palette if needed
+ if (cursorPalette) {
+ CursorMan.pushCursorPalette(0, 0, 0);
+ CursorMan.popCursorPalette();
+ }
+
+ _graphicsManager->beginGFXTransaction();
+ // Oh my god if this failed the client code might just explode.
+ return _graphicsManager->setGraphicsMode(srcMode->id);
+ } else {
+ return _graphicsManager->setGraphicsMode(srcMode->id);
+ }
}
i++;
diff --git a/backends/platform/sdl/sdl.h b/backends/platform/sdl/sdl.h
index 395b2b3aac..22d79dbfe7 100644
--- a/backends/platform/sdl/sdl.h
+++ b/backends/platform/sdl/sdl.h
@@ -74,12 +74,6 @@ public:
virtual void getTimeAndDate(TimeDate &td) const;
virtual Audio::Mixer *getMixer();
- // HACK: Special SDL events types
- enum SdlEvent {
- kSdlEventExpose = 100,
- kSdlEventResize = 101
- };
-
protected:
bool _inited;
bool _initedSDL;
diff --git a/backends/platform/sdl/win32/win32.cpp b/backends/platform/sdl/win32/win32.cpp
index 5b02a20abc..a2c8e43424 100644
--- a/backends/platform/sdl/win32/win32.cpp
+++ b/backends/platform/sdl/win32/win32.cpp
@@ -23,10 +23,6 @@
// Disable symbol overrides so that we can use system headers.
#define FORBIDDEN_SYMBOL_ALLOW_ALL
-#include "common/scummsys.h"
-#include "common/error.h"
-#include "common/textconsole.h"
-
#ifdef WIN32
#define WIN32_LEAN_AND_MEAN
@@ -34,6 +30,13 @@
#undef ARRAYSIZE // winnt.h defines ARRAYSIZE, but we want our own one...
#include <shellapi.h>
+#include "common/scummsys.h"
+#include "common/config-manager.h"
+#include "common/error.h"
+#include "common/textconsole.h"
+
+#include <SDL_syswm.h> // For setting the icon
+
#include "backends/platform/sdl/win32/win32.h"
#include "backends/fs/windows/windows-fs-factory.h"
#include "backends/taskbar/win32/win32-taskbar.h"
@@ -42,46 +45,7 @@
#define DEFAULT_CONFIG_FILE "scummvm.ini"
-//#define HIDE_CONSOLE
-
-#ifdef HIDE_CONSOLE
-struct SdlConsoleHidingWin32 {
- DWORD myPid;
- DWORD myTid;
- HWND consoleHandle;
-};
-
-// console hiding for win32
-static BOOL CALLBACK initBackendFindConsoleWin32Proc(HWND hWnd, LPARAM lParam) {
- DWORD pid, tid;
- SdlConsoleHidingWin32 *variables = (SdlConsoleHidingWin32 *)lParam;
- tid = GetWindowThreadProcessId(hWnd, &pid);
- if ((tid == variables->myTid) && (pid == variables->myPid)) {
- variables->consoleHandle = hWnd;
- return FALSE;
- }
- return TRUE;
-}
-
-#endif
-
void OSystem_Win32::init() {
-#ifdef HIDE_CONSOLE
- // console hiding for win32
- SdlConsoleHidingWin32 consoleHidingWin32;
- consoleHidingWin32.consoleHandle = 0;
- consoleHidingWin32.myPid = GetCurrentProcessId();
- consoleHidingWin32.myTid = GetCurrentThreadId();
- EnumWindows (initBackendFindConsoleWin32Proc, (LPARAM)&consoleHidingWin32);
-
- if (!ConfMan.getBool("show_console")) {
- if (consoleHidingWin32.consoleHandle) {
- // We won't find a window with our TID/PID in case we were started from command-line
- ShowWindow(consoleHidingWin32.consoleHandle, SW_HIDE);
- }
- }
-#endif
-
// Initialize File System Factory
_fsFactory = new WindowsFilesystemFactory();
@@ -94,6 +58,26 @@ void OSystem_Win32::init() {
OSystem_SDL::init();
}
+void OSystem_Win32::initBackend() {
+ // Console window is enabled by default on Windows
+ ConfMan.registerDefault("console", true);
+
+ // Enable or disable the window console window
+ if (ConfMan.getBool("console")) {
+ if (AllocConsole()) {
+ freopen("CONIN$","r",stdin);
+ freopen("CONOUT$","w",stdout);
+ freopen("CONOUT$","w",stderr);
+ }
+ SetConsoleTitle("ScummVM Status Window");
+ } else {
+ FreeConsole();
+ }
+
+ // Invoke parent implementation of this method
+ OSystem_SDL::initBackend();
+}
+
bool OSystem_Win32::hasFeature(Feature f) {
if (f == kFeatureDisplayLogFile)
@@ -137,6 +121,28 @@ bool OSystem_Win32::displayLogFile() {
return false;
}
+void OSystem_Win32::setupIcon() {
+ HMODULE handle = GetModuleHandle(NULL);
+ HICON ico = LoadIcon(handle, MAKEINTRESOURCE(1001 /* IDI_ICON */));
+ if (ico) {
+ SDL_SysWMinfo wminfo;
+ SDL_VERSION(&wminfo.version);
+ if (SDL_GetWMInfo(&wminfo)) {
+ // Replace the handle to the icon associated with the window class by our custom icon
+ SetClassLongPtr(wminfo.window, GCLP_HICON, (ULONG_PTR)ico);
+
+ // Since there wasn't any default icon, we can't use the return value from SetClassLong
+ // to check for errors (it would be 0 in both cases: error or no previous value for the
+ // icon handle). Instead we check for the last-error code value.
+ if (GetLastError() == ERROR_SUCCESS)
+ return;
+ }
+ }
+
+ // If no icon has been set, fallback to default path
+ OSystem_SDL::setupIcon();
+}
+
Common::String OSystem_Win32::getDefaultConfigFileName() {
char configFile[MAXPATHLEN];
@@ -155,18 +161,31 @@ Common::String OSystem_Win32::getDefaultConfigFileName() {
error("Unable to access user profile directory");
strcat(configFile, "\\Application Data");
- CreateDirectory(configFile, NULL);
+
+ // If the directory already exists (as it should in most cases),
+ // we don't want to fail, but we need to stop on other errors (such as ERROR_PATH_NOT_FOUND)
+ if (!CreateDirectory(configFile, NULL)) {
+ if (GetLastError() != ERROR_ALREADY_EXISTS)
+ error("Cannot create Application data folder");
+ }
}
strcat(configFile, "\\ScummVM");
- CreateDirectory(configFile, NULL);
+ if (!CreateDirectory(configFile, NULL)) {
+ if (GetLastError() != ERROR_ALREADY_EXISTS)
+ error("Cannot create ScummVM application data folder");
+ }
+
strcat(configFile, "\\" DEFAULT_CONFIG_FILE);
FILE *tmp = NULL;
if ((tmp = fopen(configFile, "r")) == NULL) {
// Check windows directory
char oldConfigFile[MAXPATHLEN];
- GetWindowsDirectory(oldConfigFile, MAXPATHLEN);
+ uint ret = GetWindowsDirectory(oldConfigFile, MAXPATHLEN);
+ if (ret == 0 || ret > MAXPATHLEN)
+ error("Cannot retrieve the path of the Windows directory");
+
strcat(oldConfigFile, "\\" DEFAULT_CONFIG_FILE);
if ((tmp = fopen(oldConfigFile, "r"))) {
strcpy(configFile, oldConfigFile);
@@ -178,7 +197,10 @@ Common::String OSystem_Win32::getDefaultConfigFileName() {
}
} else {
// Check windows directory
- GetWindowsDirectory(configFile, MAXPATHLEN);
+ uint ret = GetWindowsDirectory(configFile, MAXPATHLEN);
+ if (ret == 0 || ret > MAXPATHLEN)
+ error("Cannot retrieve the path of the Windows directory");
+
strcat(configFile, "\\" DEFAULT_CONFIG_FILE);
}
diff --git a/backends/platform/sdl/win32/win32.h b/backends/platform/sdl/win32/win32.h
index ef7b6af3f1..b56997a63b 100644
--- a/backends/platform/sdl/win32/win32.h
+++ b/backends/platform/sdl/win32/win32.h
@@ -28,6 +28,7 @@
class OSystem_Win32 : public OSystem_SDL {
public:
virtual void init();
+ virtual void initBackend();
virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority = 0);
@@ -46,6 +47,7 @@ protected:
*/
Common::String _logFilePath;
+ virtual void setupIcon();
virtual Common::String getDefaultConfigFileName();
virtual Common::WriteStream *createLogFile();
};
diff --git a/backends/platform/symbian/.placeholder b/backends/platform/symbian/.placeholder
index dcf4d34a62..4af1e27cc7 100644
--- a/backends/platform/symbian/.placeholder
+++ b/backends/platform/symbian/.placeholder
@@ -1 +1 @@
->> SumthinWicked *grins* << \ No newline at end of file
+>> SumthinWicked *grins* <<
diff --git a/backends/platform/symbian/BuildPackageUpload_AllVersions.pl b/backends/platform/symbian/BuildPackageUpload_AllVersions.pl
index 3bdcede76a..3062068852 100644
--- a/backends/platform/symbian/BuildPackageUpload_AllVersions.pl
+++ b/backends/platform/symbian/BuildPackageUpload_AllVersions.pl
@@ -798,5 +798,3 @@ sub PrintMessage()
}
##################################################################################################################
-
-
diff --git a/backends/platform/symbian/README b/backends/platform/symbian/README
index 1f49c52f02..83e98a534a 100644
--- a/backends/platform/symbian/README
+++ b/backends/platform/symbian/README
@@ -24,6 +24,17 @@ About ScummVM
Jurgen and Lars have successfully transfered all needed changes into CVS/SVN, with additional helpful tools for Symbian OS
Release History:
+ Release version: 1.4.0
+ * Nothing significant in the Symbian port, except SDL improvements (new SDL version used)
+ * See main readme for general ScummVM improvements, major update
+
+ Release version: 1.3.1
+ * Nothing significant in the Symbian port, except SDL improvements (new SDL version used)
+ * See main readme for general ScummVM improvements, major update
+
+ Release version: 1.3.0
+ * Nothing significant in the Symbian port, except SDL improvements (new SDL version used)
+ * See main readme for general ScummVM improvements, major update
Release version: 1.2.1
* Symbian port now split in two parts, ScummVM 1 and ScummVM 2 to keep the exe size down.
ScummVM 1 contains the following engines:
@@ -177,4 +188,3 @@ Greetz & such
greetz,
SumthinWicked & Anotherguest
-
diff --git a/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg b/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg
index 469c815afb..0d22c9d016 100644
--- a/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg
+++ b/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg
@@ -61,4 +61,4 @@
""-"!:\system\apps\ScummVM\sdl.ini",FILENULL
; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini.
-; It will remove the config file, std***.txt files & dirs on uninstall. \ No newline at end of file
+; It will remove the config file, std***.txt files & dirs on uninstall.
diff --git a/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in b/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in
index aa5e1f9b18..583d1a35e7 100644
--- a/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in
+++ b/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in
@@ -87,7 +87,7 @@ STATICLIBRARY esdl.lib
// *** Include paths
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\engines
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\engines
USERINCLUDE ..\..\..\..\backends\fs ..\src ..\..\..\..\backends\platform\sdl ..\..\..\..\audio
SYSTEMINCLUDE \epoc32\include\ESDL
@@ -130,9 +130,13 @@ SOURCE gui\Dialog.cpp
// Common error
source common\error.cpp
+source common\quicktime.cpp
// Special for graphics
source graphics\iff.cpp
+source backends\graphics\symbiansdl\symbiansdl-graphics.cpp
+source backends\graphics\surfacesdl\surfacesdl-graphics.cpp
+source engines\obsolete.cpp
// *** Dynamic Libraries
LIBRARY cone.lib eikcore.lib
diff --git a/backends/platform/symbian/S60v3/ScummVM_Loc.rss b/backends/platform/symbian/S60v3/ScummVM_Loc.rss
index d98ef5ae71..7247ce1207 100644
--- a/backends/platform/symbian/S60v3/ScummVM_Loc.rss
+++ b/backends/platform/symbian/S60v3/ScummVM_Loc.rss
@@ -19,4 +19,3 @@ RESOURCE LOCALISABLE_APP_INFO
}
};
}
-
diff --git a/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in b/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in
index 09592ef3e3..5367bf0d1f 100644
--- a/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in
+++ b/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in
@@ -87,7 +87,7 @@ STATICLIBRARY esdl.lib
// *** Include paths
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\engines
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\engines
USERINCLUDE ..\..\..\..\backends\fs ..\src ..\..\..\..\backends\platform\sdl ..\..\..\..\audio
SYSTEMINCLUDE \epoc32\include\ESDL
@@ -130,9 +130,13 @@ SOURCE gui\Dialog.cpp
// Common error
source common\error.cpp
+source common\quicktime.cpp
// Special for graphics
source graphics\iff.cpp
+source backends\graphics\symbiansdl\symbiansdl-graphics.cpp
+source backends\graphics\surfacesdl\surfacesdl-graphics.cpp
+source engines\obsolete.cpp
// *** Dynamic Libraries
LIBRARY cone.lib eikcore.lib
diff --git a/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg b/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg
index 2cc49a2bc6..efa1a3c50f 100644
--- a/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg
+++ b/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg
@@ -33,7 +33,7 @@
:"ScummVM"
; UID is the app's UID
-#{"ScummVM S60v3"},(0xA0000657),1,30,0
+#{"ScummVM S60v3"},(0xA0000657),1,40,0
;Supports Series 60 v 3.0
[0x101F7961], 0, 0, 0, {"Series60ProductID"}
@@ -60,12 +60,15 @@
; Common datafiles needed for some games
"..\..\..\..\dists\engine-data\kyra.dat"-"c:\data\scummvm\kyra.dat"
"..\..\..\..\dists\engine-data\sky.cpt"-"c:\data\scummvm\sky.cpt"
+"..\..\..\..\dists\engine-data\hugo.dat"-"c:\data\scummvm\hugo.dat"
"..\..\..\..\dists\engine-data\lure.dat"-"c:\data\scummvm\lure.dat"
"..\..\..\..\dists\engine-data\drascula.dat"-"c:\data\scummvm\drascula.dat"
"..\..\..\..\dists\engine-data\m4.dat"-"c:\data\scummvm\m4.dat"
"..\..\..\..\dists\engine-data\teenagent.dat"-"c:\data\scummvm\teenagent.dat"
+"..\..\..\..\dists\engine-data\toon.dat"-"c:\data\scummvm\toon.dat"
"..\..\..\vkeybd\packs\vkeybd_default.zip"-"c:\data\scummvm\vkeybd_default.zip"
"..\..\..\..\gui\themes\translations.dat"-"c:\data\scummvm\translations.dat"
+"..\..\..\..\gui\themes\scummmodern.zip"-"c:\data\scummvm\scummmodern.zip"
; Config/log files: 'empty' will automagically be removed on uninstall
""-"c:\data\scummvm\scummvm.ini",FILENULL
diff --git a/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3_split.pkg b/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3_split.pkg
new file mode 100644
index 0000000000..aea6701709
--- /dev/null
+++ b/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3_split.pkg
@@ -0,0 +1,88 @@
+;
+; ScummVM is the legal property of its developers, whose names
+; are too numerous to list here. Please refer to the COPYRIGHT
+; file distributed with this source distribution.
+;
+; This program is free software; you can redistribute it and/or
+; modify it under the terms of the GNU General Public License
+; as published by the Free Software Foundation; either version 2
+; of the License, or (at your option) any later version.
+
+; This program is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+; GNU General Public License for more details.
+
+; You should have received a copy of the GNU General Public License
+; along with this program; if not, write to the Free Software
+; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+;
+; $URL$
+; $Id$
+;
+;
+
+;;;
+;;; ScummVM .PKG file for .SIS gegeration
+;;;
+
+;Language - standard language definitions
+&EN
+
+; List of localised vendor names - one per language. At least one must be provided (English [EN]).
+; List must correspond to list of languages specified elsewhere in the .pkg
+%{"ScummVM"}
+; The non-localised, globally unique vendor name (mandatory)
+:"ScummVM"
+
+; UID is the app's UID
+#{"ScummVM S60v3"},(0xA0000657),1,40,0
+
+;Supports Series 60 v 3.0
+[0x101F7961], 0, 0, 0, {"Series60ProductID"}
+;Supports Series 60 v 5.0
+[0x1028315F], 0, 0, 0, {"Series60ProductID"}
+
+; Launcher, Application, AIF & Resource file
+"\epoc32\release\gcce\urel\ScummVM.exe"- "!:\sys\bin\ScummVM.exe"
+"\epoc32\data\z\resource\apps\ScummVM.rsc"- "!:\resource\apps\ScummVM.rsc"
+"\epoc32\Data\Z\resource\apps\scummvm_loc.rsc"- "!:\resource\apps\scummvm_loc.rsc"
+"\epoc32\data\Z\resource\APPS\scummvm.MIF"- "!:\resource\apps\scummvm.MIF"
+"\epoc32\data\z\private\10003a3f\apps\scummvm_reg.rsc"-"!:\private\10003a3f\import\apps\scummvm_reg.rsc"
+
+"\epoc32\release\gcce\urel\ScummVM_A0000658.exe"- "!:\sys\bin\ScummVM_A0000658.exe"
+"\epoc32\data\z\resource\apps\ScummVM_A0000658.rsc"- "!:\resource\apps\ScummVM_A0000658.rsc"
+"\epoc32\Data\Z\resource\apps\ScummVM_A0000658_loc.rsc"- "!:\resource\apps\ScummVM_A0000658_loc.rsc"
+"\epoc32\data\z\private\10003a3f\apps\scummvm_A0000658_reg.rsc"-"!:\private\10003a3f\import\apps\scummvm_A0000658_reg.rsc"
+
+"..\..\..\..\dists\pred.dic"-"c:\data\scummvm\pred.dic"
+
+; Scummvm Documentation
+"..\..\..\..\COPYRIGHT"-"!:\resource\apps\scummvm\COPYRIGHT", FT, TC
+"..\..\..\..\COPYING"-"!:\resource\apps\scummvm\COPYING", FT, TC
+"..\README"-"!:\resource\apps\scummvm\SYMBIAN_README", FT, TC
+"..\..\..\..\AUTHORS"-"!:\resource\apps\scummvm\AUTHORS"
+"..\..\..\..\README"-"!:\resource\apps\scummvm\README"
+"..\..\..\..\NEWS"-"!:\resource\apps\scummvm\NEWS"
+
+; Common datafiles needed for some games
+"..\..\..\..\dists\engine-data\kyra.dat"-"c:\data\scummvm\kyra.dat"
+"..\..\..\..\dists\engine-data\sky.cpt"-"c:\data\scummvm\sky.cpt"
+"..\..\..\..\dists\engine-data\hugo.dat"-"c:\data\scummvm\hugo.dat"
+"..\..\..\..\dists\engine-data\lure.dat"-"c:\data\scummvm\lure.dat"
+"..\..\..\..\dists\engine-data\drascula.dat"-"c:\data\scummvm\drascula.dat"
+"..\..\..\..\dists\engine-data\m4.dat"-"c:\data\scummvm\m4.dat"
+"..\..\..\..\dists\engine-data\teenagent.dat"-"c:\data\scummvm\teenagent.dat"
+"..\..\..\..\dists\engine-data\toon.dat"-"c:\data\scummvm\toon.dat"
+"..\..\..\vkeybd\packs\vkeybd_default.zip"-"c:\data\scummvm\vkeybd_default.zip"
+"..\..\..\..\gui\themes\translations.dat"-"c:\data\scummvm\translations.dat"
+"..\..\..\..\gui\themes\scummmodern.zip"-"c:\data\scummvm\scummmodern.zip"
+
+; Config/log files: 'empty' will automagically be removed on uninstall
+""-"c:\data\scummvm\scummvm.ini",FILENULL
+""-"c:\data\scummvm\scummvm.stdout.txt",FILENULL
+""-"c:\data\scummvm\scummvm.stderr.txt",FILENULL
+""-"c:\data\scummvm\sdl.ini",FILENULL
+
+; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini.
+; It will remove the config file, std***.txt files & dirs on uninstall.
diff --git a/backends/platform/symbian/S60v3/scummvm_A0000658_loc.rss b/backends/platform/symbian/S60v3/scummvm_A0000658_loc.rss
index 9273312f42..849e0b017f 100644
--- a/backends/platform/symbian/S60v3/scummvm_A0000658_loc.rss
+++ b/backends/platform/symbian/S60v3/scummvm_A0000658_loc.rss
@@ -19,4 +19,3 @@ RESOURCE LOCALISABLE_APP_INFO
}
};
}
-
diff --git a/backends/platform/symbian/S60v3/scummvm_A0000658_reg.rss b/backends/platform/symbian/S60v3/scummvm_A0000658_reg.rss
index 1b1cc9e64f..031be012cd 100644
--- a/backends/platform/symbian/S60v3/scummvm_A0000658_reg.rss
+++ b/backends/platform/symbian/S60v3/scummvm_A0000658_reg.rss
@@ -15,4 +15,3 @@ RESOURCE APP_REGISTRATION_INFO
// Specify the location of the localisable icon/caption definition file
localisable_resource_file = "\\Resource\\Apps\\ScummVM_A0000658_loc";
}
-
diff --git a/backends/platform/symbian/S60v3/scummvm_reg.rss b/backends/platform/symbian/S60v3/scummvm_reg.rss
index 1156694bd7..b5617913d6 100644
--- a/backends/platform/symbian/S60v3/scummvm_reg.rss
+++ b/backends/platform/symbian/S60v3/scummvm_reg.rss
@@ -15,4 +15,3 @@ RESOURCE APP_REGISTRATION_INFO
// Specify the location of the localisable icon/caption definition file
localisable_resource_file = "\\Resource\\Apps\\ScummVM_loc";
}
-
diff --git a/backends/platform/symbian/S80/ScummVM_S80.mmp.in b/backends/platform/symbian/S80/ScummVM_S80.mmp.in
index efd0d0ee32..5e4b6d447e 100644
--- a/backends/platform/symbian/S80/ScummVM_S80.mmp.in
+++ b/backends/platform/symbian/S80/ScummVM_S80.mmp.in
@@ -107,4 +107,3 @@ LIBRARY euser.lib apparc.lib fbscli.lib
LIBRARY estlib.lib apgrfx.lib
LIBRARY gdi.lib hal.lib bitgdi.lib
LIBRARY mediaclientaudiostream.lib efsrv.lib ws32.lib bafl.lib
-
diff --git a/backends/platform/symbian/S90/Scummvm_S90.mmp.in b/backends/platform/symbian/S90/Scummvm_S90.mmp.in
index 4afdb5c62e..06d65f1641 100644
--- a/backends/platform/symbian/S90/Scummvm_S90.mmp.in
+++ b/backends/platform/symbian/S90/Scummvm_S90.mmp.in
@@ -107,4 +107,3 @@ LIBRARY euser.lib apparc.lib fbscli.lib
LIBRARY estlib.lib apgrfx.lib
LIBRARY gdi.lib hal.lib bitgdi.lib bafl.lib
LIBRARY mediaclientaudiostream.lib efsrv.lib ws32.lib
-
diff --git a/backends/platform/symbian/UIQ2/ScummVM.rss b/backends/platform/symbian/UIQ2/ScummVM.rss
index 3550d82f7d..374bd50680 100644
--- a/backends/platform/symbian/UIQ2/ScummVM.rss
+++ b/backends/platform/symbian/UIQ2/ScummVM.rss
@@ -41,4 +41,3 @@ RESOURCE TBUF16 { buf=""; }
RESOURCE EIK_APP_INFO
{
}
-
diff --git a/backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in b/backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in
index 4000b1653d..80ba37d694 100644
--- a/backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in
+++ b/backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in
@@ -106,4 +106,3 @@ LIBRARY qikctl.lib bafl.lib
START WINS
WIN32_LIBRARY lldiv.obj llmul.obj llshl.obj
END
-
diff --git a/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg b/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg
index ad3a31cb30..8284f64611 100644
--- a/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg
+++ b/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg
@@ -54,4 +54,4 @@
; add extra Vibration lib for P800, will be ignored during all other installs
IF MachineUID = 0x101F408B
@"Vibration.sis", (0x101F94A3)
-ENDIF \ No newline at end of file
+ENDIF
diff --git a/backends/platform/symbian/UIQ3/ScummVM.rss b/backends/platform/symbian/UIQ3/ScummVM.rss
index cb47568288..2021b0506e 100644
--- a/backends/platform/symbian/UIQ3/ScummVM.rss
+++ b/backends/platform/symbian/UIQ3/ScummVM.rss
@@ -48,4 +48,3 @@ RESOURCE EIK_APP_INFO
}
#include <sdl.ra>
-
diff --git a/backends/platform/symbian/UIQ3/ScummVM_A0000658.rss b/backends/platform/symbian/UIQ3/ScummVM_A0000658.rss
index cb47568288..2021b0506e 100644
--- a/backends/platform/symbian/UIQ3/ScummVM_A0000658.rss
+++ b/backends/platform/symbian/UIQ3/ScummVM_A0000658.rss
@@ -48,4 +48,3 @@ RESOURCE EIK_APP_INFO
}
#include <sdl.ra>
-
diff --git a/backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in b/backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in
index e6f2b691ce..3bc93d8ce3 100644
--- a/backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in
+++ b/backends/platform/symbian/UIQ3/ScummVM_A0000658_UIQ3.mmp.in
@@ -88,7 +88,7 @@ STATICLIBRARY esdl.lib
// *** Include paths
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\engines
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\engines
USERINCLUDE ..\..\..\..\backends\fs ..\src ..\..\..\..\backends\platform\sdl ..\..\..\..\sound
SYSTEMINCLUDE \epoc32\include\ESDL
@@ -128,9 +128,13 @@ SOURCE gui\Dialog.cpp
// Common error
source common\error.cpp
+source common\quicktime.cpp
// Special for graphics
source graphics\iff.cpp
+source backends\graphics\symbiansdl\symbiansdl-graphics.cpp
+source backends\graphics\surfacesdl\surfacesdl-graphics.cpp
+source engines\obsolete.cpp
// *** Dynamic Libraries
LIBRARY cone.lib eikcore.lib
diff --git a/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in b/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in
index 3b6a3d9bd7..bd5016f8d1 100644
--- a/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in
+++ b/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in
@@ -88,7 +88,7 @@ STATICLIBRARY esdl.lib
// *** Include paths
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\engines
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\engines
USERINCLUDE ..\..\..\..\backends\fs ..\src ..\..\..\..\backends\platform\sdl ..\..\..\..\sound
SYSTEMINCLUDE \epoc32\include\ESDL
@@ -128,9 +128,13 @@ SOURCE gui\Dialog.cpp
// Common error
source common\error.cpp
+source common\quicktime.cpp
// Special for graphics
source graphics\iff.cpp
+source backends\graphics\symbiansdl\symbiansdl-graphics.cpp
+source backends\graphics\surfacesdl\surfacesdl-graphics.cpp
+source engines\obsolete.cpp
// *** Dynamic Libraries
LIBRARY cone.lib eikcore.lib
diff --git a/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg b/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg
index 2187a375a8..47e0ebbd09 100644
--- a/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg
+++ b/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg
@@ -32,7 +32,7 @@
:"ScummVM"
; UID is the app's UID
-#{"ScummVM UIQ3"},(0xA0000657),1,30,0
+#{"ScummVM UIQ3"},(0xA0000657),1,40,0
; ProductID for UIQ 3.0
; Product/platform version UID, Major, Minor, Build, Product ID
@@ -44,6 +44,7 @@
"\epoc32\Data\Z\resource\apps\scummvm_loc.rsc"- "!:\resource\apps\scummvm_loc.rsc"
"\epoc32\data\Z\resource\APPS\scummvm.MBM"- "!:\resource\apps\scummvm.MBM"
"\epoc32\data\z\private\10003a3f\apps\scummvm_reg.rsc"-"!:\private\10003a3f\import\apps\scummvm_reg.rsc"
+
"..\..\..\..\dists\pred.dic"-"c:\shared\scummvm\pred.dic"
; Scummvm Documentation
@@ -57,12 +58,15 @@
; Common datafiles needed for some games
"..\..\..\..\dists\engine-data\kyra.dat"-"c:\shared\scummvm\kyra.dat"
"..\..\..\..\dists\engine-data\sky.cpt"-"c:\shared\scummvm\sky.cpt"
+"..\..\..\..\dists\engine-data\hugo.dat"-"c:\shared\scummvm\hugo.dat"
"..\..\..\..\dists\engine-data\lure.dat"-"c:\shared\scummvm\lure.dat"
"..\..\..\..\dists\engine-data\drascula.dat"-"c:\shared\scummvm\drascula.dat"
"..\..\..\..\dists\engine-data\m4.dat"-"c:\shared\scummvm\m4.dat"
"..\..\..\..\dists\engine-data\teenagent.dat"-"c:\shared\scummvm\teenagent.dat"
+"..\..\..\..\dists\engine-data\toon.dat"-"c:\shared\scummvm\toon.dat"
"..\..\..\vkeybd\packs\vkeybd_default.zip"-"c:\shared\scummvm\vkeybd_default.zip"
"..\..\..\..\gui\themes\translations.dat"-"c:\shared\scummvm\translations.dat"
+"..\..\..\..\gui\themes\scummmodern.zip"-"c:\shared\scummvm\scummmodern.zip"
; Config/log files: 'empty' will automagically be removed on uninstall
""-"c:\shared\scummvm\scummvm.ini",FILENULL
diff --git a/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3_split.pkg b/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3_split.pkg
new file mode 100644
index 0000000000..fb9923fae0
--- /dev/null
+++ b/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3_split.pkg
@@ -0,0 +1,86 @@
+; ScummVM - Graphic Adventure Engine
+;
+; ScummVM is the legal property of its developers, whose names
+; are too numerous to list here. Please refer to the COPYRIGHT
+; file distributed with this source distribution.
+;
+; This program is free software; you can redistribute it and/or
+; modify it under the terms of the GNU General Public License
+; as published by the Free Software Foundation; either version 2
+; of the License, or (at your option) any later version.
+
+; This program is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+; GNU General Public License for more details.
+
+; You should have received a copy of the GNU General Public License
+; along with this program; if not, write to the Free Software
+; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+;
+; $URL$
+; $Id$
+;
+;
+
+;;;
+;;; ScummVM .PKG file for .SIS gegeration
+;;;
+
+
+; List of localised vendor names - one per language. At least one must be provided (English [EN]).
+; List must correspond to list of languages specified elsewhere in the .pkg
+%{"ScummVM"}
+; The non-localised, globally unique vendor name (mandatory)
+:"ScummVM"
+
+; UID is the app's UID
+#{"ScummVM UIQ3"},(0xA0000657),1,40,0
+
+; ProductID for UIQ 3.0
+; Product/platform version UID, Major, Minor, Build, Product ID
+(0x101F6300), 3, 0, 0, {"UIQ30ProductID"}
+
+; Application, AIF & Resource file
+"\epoc32\release\gcce\urel\ScummVM.exe"- "!:\sys\bin\ScummVM.exe"
+"\epoc32\data\z\resource\apps\ScummVM.rsc"- "!:\resource\apps\ScummVM.rsc"
+"\epoc32\Data\Z\resource\apps\scummvm_loc.rsc"- "!:\resource\apps\scummvm_loc.rsc"
+"\epoc32\data\Z\resource\APPS\scummvm.MBM"- "!:\resource\apps\scummvm.MBM"
+"\epoc32\data\z\private\10003a3f\apps\scummvm_reg.rsc"-"!:\private\10003a3f\import\apps\scummvm_reg.rsc"
+
+"\epoc32\release\gcce\urel\ScummVM_A0000658.exe"- "!:\sys\bin\ScummVM_A0000658.exe"
+"\epoc32\data\z\resource\apps\ScummVM_A0000658.rsc"- "!:\resource\apps\ScummVM_A0000658.rsc"
+"\epoc32\Data\Z\resource\apps\ScummVM_A0000658_loc.rsc"- "!:\resource\apps\ScummVM_A0000658_loc.rsc"
+"\epoc32\data\z\private\10003a3f\apps\scummvm_A0000658_reg.rsc"-"!:\private\10003a3f\import\apps\scummvm_A0000658_reg.rsc"
+
+"..\..\..\..\dists\pred.dic"-"c:\shared\scummvm\pred.dic"
+
+; Scummvm Documentation
+"..\..\..\..\COPYRIGHT"-"!:\resource\apps\scummvm\COPYRIGHT", FT, TC
+"..\..\..\..\COPYING"-"!:\resource\apps\scummvm\COPYING", FT, TC
+"..\README"-"!:\system\apps\scummvm\SYMBIAN_README", FT, TC
+"..\..\..\..\AUTHORS"-"!:\resource\apps\scummvm\AUTHORS"
+"..\..\..\..\README"-"!:\resource\apps\scummvm\README"
+"..\..\..\..\NEWS"-"!:\resource\apps\scummvm\NEWS"
+
+; Common datafiles needed for some games
+"..\..\..\..\dists\engine-data\kyra.dat"-"c:\shared\scummvm\kyra.dat"
+"..\..\..\..\dists\engine-data\sky.cpt"-"c:\shared\scummvm\sky.cpt"
+"..\..\..\..\dists\engine-data\hugo.dat"-"c:\shared\scummvm\hugo.dat"
+"..\..\..\..\dists\engine-data\lure.dat"-"c:\shared\scummvm\lure.dat"
+"..\..\..\..\dists\engine-data\drascula.dat"-"c:\shared\scummvm\drascula.dat"
+"..\..\..\..\dists\engine-data\m4.dat"-"c:\shared\scummvm\m4.dat"
+"..\..\..\..\dists\engine-data\teenagent.dat"-"c:\shared\scummvm\teenagent.dat"
+"..\..\..\..\dists\engine-data\toon.dat"-"c:\shared\scummvm\toon.dat"
+"..\..\..\vkeybd\packs\vkeybd_default.zip"-"c:\shared\scummvm\vkeybd_default.zip"
+"..\..\..\..\gui\themes\translations.dat"-"c:\shared\scummvm\translations.dat"
+"..\..\..\..\gui\themes\scummmodern.zip"-"c:\shared\scummvm\scummmodern.zip"
+
+; Config/log files: 'empty' will automagically be removed on uninstall
+""-"c:\shared\scummvm\scummvm.ini",FILENULL
+""-"c:\shared\scummvm\scummvm.stdout.txt",FILENULL
+""-"c:\shared\scummvm\scummvm.stderr.txt",FILENULL
+""-"c:\shared\scummvm\sdl.ini",FILENULL
+
+; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini.
+; It will remove the config file, std***.txt files & dirs on uninstall.
diff --git a/backends/platform/symbian/UIQ3/scummvm_A0000658_loc.rss b/backends/platform/symbian/UIQ3/scummvm_A0000658_loc.rss
index a6ee70ab25..7f3b71ef84 100644
--- a/backends/platform/symbian/UIQ3/scummvm_A0000658_loc.rss
+++ b/backends/platform/symbian/UIQ3/scummvm_A0000658_loc.rss
@@ -82,4 +82,3 @@ RESOURCE LOCALISABLE_APP_INFO
}
};
}
-
diff --git a/backends/platform/symbian/UIQ3/scummvm_A0000658_reg.rss b/backends/platform/symbian/UIQ3/scummvm_A0000658_reg.rss
index 2158406d0d..68d0d33abd 100644
--- a/backends/platform/symbian/UIQ3/scummvm_A0000658_reg.rss
+++ b/backends/platform/symbian/UIQ3/scummvm_A0000658_reg.rss
@@ -15,4 +15,3 @@ RESOURCE APP_REGISTRATION_INFO
// Specify the location of the localisable icon/caption definition file
localisable_resource_file = "\\Resource\\Apps\\ScummVM_A0000658_loc";
}
-
diff --git a/backends/platform/symbian/UIQ3/scummvm_loc.rss b/backends/platform/symbian/UIQ3/scummvm_loc.rss
index 201aacefa3..d00a67f3dc 100644
--- a/backends/platform/symbian/UIQ3/scummvm_loc.rss
+++ b/backends/platform/symbian/UIQ3/scummvm_loc.rss
@@ -56,4 +56,3 @@ RESOURCE LOCALISABLE_APP_INFO
}
};
}
-
diff --git a/backends/platform/symbian/UIQ3/scummvm_reg.rss b/backends/platform/symbian/UIQ3/scummvm_reg.rss
index 1156694bd7..b5617913d6 100644
--- a/backends/platform/symbian/UIQ3/scummvm_reg.rss
+++ b/backends/platform/symbian/UIQ3/scummvm_reg.rss
@@ -15,4 +15,3 @@ RESOURCE APP_REGISTRATION_INFO
// Specify the location of the localisable icon/caption definition file
localisable_resource_file = "\\Resource\\Apps\\ScummVM_loc";
}
-
diff --git a/backends/platform/symbian/mmp/scummvm_agi.mmp.in b/backends/platform/symbian/mmp/scummvm_agi.mmp.in
index a7dcfb0bb5..5805d36133 100644
--- a/backends/platform/symbian/mmp/scummvm_agi.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_agi.mmp.in
@@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\agi
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_agos.mmp.in b/backends/platform/symbian/mmp/scummvm_agos.mmp.in
index 4708a040ec..236a62f1b8 100644
--- a/backends/platform/symbian/mmp/scummvm_agos.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_agos.mmp.in
@@ -62,6 +62,6 @@ SOURCEPATH ..\..\..\..\engines\agos
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_base.mmp.in b/backends/platform/symbian/mmp/scummvm_base.mmp.in
index 9acef57cea..0387bfaf26 100644
--- a/backends/platform/symbian/mmp/scummvm_base.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_base.mmp.in
@@ -48,7 +48,7 @@ ALWAYS_BUILD_AS_ARM
// *** Include paths
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio
USERINCLUDE ..\..\..\..\backends\fs ..\src ..\..\..\..\backends\platform\sdl
SYSTEMINCLUDE \epoc32\include\ESDL
@@ -156,4 +156,4 @@ SOURCE backends\vkeybd\virtual-keyboard.cpp
// Downscaler
SOURCE graphics\scaler\downscaler.cpp
-MACRO SDL_BACKEND \ No newline at end of file
+MACRO SDL_BACKEND
diff --git a/backends/platform/symbian/mmp/scummvm_cine.mmp.in b/backends/platform/symbian/mmp/scummvm_cine.mmp.in
index aac7d8b5b1..e75ece95f1 100644
--- a/backends/platform/symbian/mmp/scummvm_cine.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_cine.mmp.in
@@ -56,5 +56,5 @@ SOURCEPATH ..\..\..\..\engines\cine
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_cruise.mmp.in b/backends/platform/symbian/mmp/scummvm_cruise.mmp.in
index fc60bfeace..a91d33b5f5 100644
--- a/backends/platform/symbian/mmp/scummvm_cruise.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_cruise.mmp.in
@@ -56,5 +56,5 @@ SOURCEPATH ..\..\..\..\engines\cruise
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_draci.mmp.in b/backends/platform/symbian/mmp/scummvm_draci.mmp.in
index d879a03797..044247fac7 100644
--- a/backends/platform/symbian/mmp/scummvm_draci.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_draci.mmp.in
@@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\draci
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_drascula.mmp.in b/backends/platform/symbian/mmp/scummvm_drascula.mmp.in
index f83bcdb68f..0561e494c1 100644
--- a/backends/platform/symbian/mmp/scummvm_drascula.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_drascula.mmp.in
@@ -56,5 +56,5 @@ SOURCEPATH ..\..\..\..\engines\drascula
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_gob.mmp.in b/backends/platform/symbian/mmp/scummvm_gob.mmp.in
index 900f862846..7c92611fd2 100644
--- a/backends/platform/symbian/mmp/scummvm_gob.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_gob.mmp.in
@@ -56,5 +56,5 @@ SOURCEPATH ..\..\..\..\engines\gob
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_groovie.mmp.in b/backends/platform/symbian/mmp/scummvm_groovie.mmp.in
index 1051e6adea..c0294b3b0d 100644
--- a/backends/platform/symbian/mmp/scummvm_groovie.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_groovie.mmp.in
@@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\groovie
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_hugo.mmp.in b/backends/platform/symbian/mmp/scummvm_hugo.mmp.in
index 31975d3107..66e22fc34b 100644
--- a/backends/platform/symbian/mmp/scummvm_hugo.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_hugo.mmp.in
@@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\hugo
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_kyra.mmp.in b/backends/platform/symbian/mmp/scummvm_kyra.mmp.in
index 453d41bdc1..d5f2ec951c 100644
--- a/backends/platform/symbian/mmp/scummvm_kyra.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_kyra.mmp.in
@@ -62,5 +62,5 @@ SOURCEPATH ..\..\..\..\engines\kyra
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_lastexpress.mmp.in b/backends/platform/symbian/mmp/scummvm_lastexpress.mmp.in
index 5d0fe6de36..57efa31a85 100644
--- a/backends/platform/symbian/mmp/scummvm_lastexpress.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_lastexpress.mmp.in
@@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\lastexpress
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_lure.mmp.in b/backends/platform/symbian/mmp/scummvm_lure.mmp.in
index add33d7d8b..2ac1f8f8ff 100644
--- a/backends/platform/symbian/mmp/scummvm_lure.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_lure.mmp.in
@@ -56,5 +56,5 @@ SOURCEPATH ..\..\..\..\engines\lure
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_m4.mmp.in b/backends/platform/symbian/mmp/scummvm_m4.mmp.in
index 6896dadf10..81ec94dbd4 100644
--- a/backends/platform/symbian/mmp/scummvm_m4.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_m4.mmp.in
@@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\m4
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_made.mmp.in b/backends/platform/symbian/mmp/scummvm_made.mmp.in
index c51d3ac618..dc24aee279 100644
--- a/backends/platform/symbian/mmp/scummvm_made.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_made.mmp.in
@@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\made
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_mohawk.mmp.in b/backends/platform/symbian/mmp/scummvm_mohawk.mmp.in
index 296c458e39..cb5b18ba18 100644
--- a/backends/platform/symbian/mmp/scummvm_mohawk.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_mohawk.mmp.in
@@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\mohawk
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_parallaction.mmp.in b/backends/platform/symbian/mmp/scummvm_parallaction.mmp.in
index 4052a16693..e86473e47a 100644
--- a/backends/platform/symbian/mmp/scummvm_parallaction.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_parallaction.mmp.in
@@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\parallaction
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_queen.mmp.in b/backends/platform/symbian/mmp/scummvm_queen.mmp.in
index ec4ccff939..b5326abe74 100644
--- a/backends/platform/symbian/mmp/scummvm_queen.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_queen.mmp.in
@@ -56,5 +56,5 @@ SOURCEPATH ..\..\..\..\engines\queen
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_saga.mmp.in b/backends/platform/symbian/mmp/scummvm_saga.mmp.in
index 44e222144c..55d89f7868 100644
--- a/backends/platform/symbian/mmp/scummvm_saga.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_saga.mmp.in
@@ -68,5 +68,5 @@ SOURCEPATH ..\..\..\..\engines\saga
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_sci.mmp.in b/backends/platform/symbian/mmp/scummvm_sci.mmp.in
index 12588495cb..dc06f44a5d 100644
--- a/backends/platform/symbian/mmp/scummvm_sci.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_sci.mmp.in
@@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\sci
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_scumm.mmp.in b/backends/platform/symbian/mmp/scummvm_scumm.mmp.in
index 381a6060dd..527ce75181 100644
--- a/backends/platform/symbian/mmp/scummvm_scumm.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_scumm.mmp.in
@@ -79,7 +79,7 @@ SOURCE smush/codec47ARM.s // ARM version: add ASM routines
// *** Include paths
USERINCLUDE ..\..\..\..\engines ..\..\..\..\engines\scumm\smush ..\..\..\..\engines\scumm\insane
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version
SYSTEMINCLUDE \epoc32\include\libc
diff --git a/backends/platform/symbian/mmp/scummvm_sky.mmp.in b/backends/platform/symbian/mmp/scummvm_sky.mmp.in
index f34c839076..eeb517ffcc 100644
--- a/backends/platform/symbian/mmp/scummvm_sky.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_sky.mmp.in
@@ -56,5 +56,5 @@ SOURCEPATH ..\..\..\..\engines\sky
// *** Include paths
USERINCLUDE ..\..\..\..\engines ..\..\..\..\engines\sky\music
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_sword1.mmp.in b/backends/platform/symbian/mmp/scummvm_sword1.mmp.in
index 58f9f8fa05..0adc156719 100644
--- a/backends/platform/symbian/mmp/scummvm_sword1.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_sword1.mmp.in
@@ -56,5 +56,5 @@ SOURCEPATH ..\..\..\..\engines\sword1
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_sword2.mmp.in b/backends/platform/symbian/mmp/scummvm_sword2.mmp.in
index 4a19be92ce..c8034c3015 100644
--- a/backends/platform/symbian/mmp/scummvm_sword2.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_sword2.mmp.in
@@ -56,5 +56,5 @@ SOURCEPATH ..\..\..\..\engines\sword2
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_teenagent.mmp.in b/backends/platform/symbian/mmp/scummvm_teenagent.mmp.in
index 6b4812489e..f065bf4376 100644
--- a/backends/platform/symbian/mmp/scummvm_teenagent.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_teenagent.mmp.in
@@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\teenagent
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_tinsel.mmp.in b/backends/platform/symbian/mmp/scummvm_tinsel.mmp.in
index bb56022f20..d61492de6b 100644
--- a/backends/platform/symbian/mmp/scummvm_tinsel.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_tinsel.mmp.in
@@ -56,5 +56,5 @@ SOURCEPATH ..\..\..\..\engines\tinsel
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_toon.mmp.in b/backends/platform/symbian/mmp/scummvm_toon.mmp.in
index 05742d5242..01924614b4 100644
--- a/backends/platform/symbian/mmp/scummvm_toon.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_toon.mmp.in
@@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\toon
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_touche.mmp.in b/backends/platform/symbian/mmp/scummvm_touche.mmp.in
index ea8dd2392c..b9cb53b4bf 100644
--- a/backends/platform/symbian/mmp/scummvm_touche.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_touche.mmp.in
@@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\touche
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_tsage.mmp.in b/backends/platform/symbian/mmp/scummvm_tsage.mmp.in
index b7eb3290b3..fa4968f704 100644
--- a/backends/platform/symbian/mmp/scummvm_tsage.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_tsage.mmp.in
@@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\tsage
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/mmp/scummvm_tucker.mmp.in b/backends/platform/symbian/mmp/scummvm_tucker.mmp.in
index 0aeb0dc4ec..1ea564c0c0 100644
--- a/backends/platform/symbian/mmp/scummvm_tucker.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_tucker.mmp.in
@@ -56,6 +56,6 @@ SOURCEPATH ..\..\..\..\engines\tucker
// *** Include paths
USERINCLUDE ..\..\..\..\engines
-USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\audio ..\src
+USERINCLUDE ..\..\..\.. ..\..\..\..\gui ..\..\..\..\audio ..\src
SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version
SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src
diff --git a/backends/platform/symbian/res/ScummVmAif.rss b/backends/platform/symbian/res/ScummVmAif.rss
index 31bf7bd394..b2addc3f21 100644
--- a/backends/platform/symbian/res/ScummVmAif.rss
+++ b/backends/platform/symbian/res/ScummVmAif.rss
@@ -42,6 +42,3 @@ RESOURCE AIF_DATA
//
num_icons=2;
}
-
-
-
diff --git a/backends/platform/symbian/src/ScummApp.cpp b/backends/platform/symbian/src/ScummApp.cpp
index c4d9fc88d9..405fb5c3c2 100644
--- a/backends/platform/symbian/src/ScummApp.cpp
+++ b/backends/platform/symbian/src/ScummApp.cpp
@@ -116,5 +116,3 @@ void CScummApp::GetDataFolder(TDes& aDataFolder)
aDataFolder = _L("ScummVM");
}
/////////////////////////////////////////////////////////////////////////////////////////////////
-
-
diff --git a/backends/platform/symbian/src/ScummApp.h b/backends/platform/symbian/src/ScummApp.h
index 376964f0a1..0b9ebcdf53 100644
--- a/backends/platform/symbian/src/ScummApp.h
+++ b/backends/platform/symbian/src/ScummApp.h
@@ -48,5 +48,3 @@ public:
#endif
};
#endif
-
-
diff --git a/backends/platform/symbian/src/portdefs.h b/backends/platform/symbian/src/portdefs.h
index 86460e65c5..dd81080afe 100644
--- a/backends/platform/symbian/src/portdefs.h
+++ b/backends/platform/symbian/src/portdefs.h
@@ -32,7 +32,7 @@
#include <e32def.h>
#include <e32std.h>
-#include <math.h>
+#include <libc\math.h>
/* define pi */
#ifndef M_PI
@@ -157,6 +157,10 @@ void *scumm_bsearch(const void *key, const void *base, size_t nmemb, size_t size
#define FORBIDDEN_SYMBOL_EXCEPTION_FILE
#define FORBIDDEN_SYMBOL_EXCEPTION_fclose
#define FORBIDDEN_SYMBOL_EXCEPTION_fopen
+#define FORBIDDEN_SYMBOL_EXCEPTION_unlink
+#define FORBIDDEN_SYMBOL_EXCEPTION_getcwd
+#define FORBIDDEN_SYMBOL_EXCEPTION_stdout
+#define FORBIDDEN_SYMBOL_EXCEPTION_stderr
// we cannot include SymbianOS.h everywhere, but this works too (functions code is in SymbianOS.cpp)
namespace Symbian {
diff --git a/backends/platform/webos/webos.mk b/backends/platform/webos/webos.mk
index 37223ac56c..804b56de35 100644
--- a/backends/platform/webos/webos.mk
+++ b/backends/platform/webos/webos.mk
@@ -51,8 +51,8 @@
# Increment this number when the packaging of the app has been changed while
# ScummVM itself has the same version as before. The number can be reset to
-# 1 when the ScummVM version is increased.
-VER_PACKAGE = 5
+# 0 when the ScummVM version is increased.
+VER_PACKAGE = 0
PATH_DIST = $(srcdir)/dists/webos
PATH_MOJO = $(PATH_DIST)/mojo
@@ -60,10 +60,19 @@ APP_ID = $(shell basename $(prefix))
APP_VERSION = $(shell printf "%d.%d.%02d%02d" $(VER_MAJOR) $(VER_MINOR) $(VER_PATCH) $(VER_PACKAGE))
DESTDIR ?= staging
PORTDISTDIR ?= portdist
+ifeq ($(HOST_COMPILER),Darwin)
+ SED_DASH_I = "-i \"\""
+else
+ SED_DASH_I = "-i"
+endif
install: all
$(QUIET)$(INSTALL) -d "$(DESTDIR)$(prefix)"
+ifeq ($(HOST_COMPILER),Darwin)
+ $(QUIET)$(INSTALL) -m 0644 "$(PATH_MOJO)/"* "$(DESTDIR)$(prefix)/"
+else
$(QUIET)$(INSTALL) -m 0644 -t "$(DESTDIR)$(prefix)/" "$(PATH_MOJO)/"*
+endif
$(QUIET)$(INSTALL) -m 0755 "$(PATH_MOJO)/start" "$(DESTDIR)$(prefix)/"
$(QUIET)$(INSTALL) -d "$(DESTDIR)$(bindir)"
$(QUIET)$(INSTALL) -c -m 755 "./$(EXECUTABLE)" "$(DESTDIR)$(bindir)/$(EXECUTABLE)"
@@ -77,12 +86,12 @@ ifdef DYNAMIC_MODULES
$(QUIET)$(INSTALL) -c -m 644 $(PLUGINS) "$(DESTDIR)$(libdir)/"
$(QUIET)$(STRIP) "$(DESTDIR)$(libdir)/"*
endif
- $(QUIET)sed -i s/'APP_VERSION'/'$(APP_VERSION)'/ "$(DESTDIR)$(prefix)/appinfo.json"
- $(QUIET)sed -i s/'APP_ID'/'$(APP_ID)'/ "$(DESTDIR)$(prefix)/appinfo.json"
+ $(QUIET)sed $(SED_DASH_I) s/'APP_VERSION'/'$(APP_VERSION)'/ "$(DESTDIR)$(prefix)/appinfo.json"
+ $(QUIET)sed $(SED_DASH_I) s/'APP_ID'/'$(APP_ID)'/ "$(DESTDIR)$(prefix)/appinfo.json"
ifneq (,$(findstring -beta,$(APP_ID)))
- $(QUIET)sed -i s/'APP_TITLE'/'ScummVM Beta'/ "$(DESTDIR)$(prefix)/appinfo.json"
+ $(QUIET)sed $(SED_DASH_I) s/'APP_TITLE'/'ScummVM Beta'/ "$(DESTDIR)$(prefix)/appinfo.json"
else
- $(QUIET)sed -i s/'APP_TITLE'/'ScummVM'/ "$(DESTDIR)$(prefix)/appinfo.json"
+ $(QUIET)sed $(SED_DASH_I) s/'APP_TITLE'/'ScummVM'/ "$(DESTDIR)$(prefix)/appinfo.json"
endif
uninstall:
diff --git a/backends/platform/wii/gdb.txt b/backends/platform/wii/gdb.txt
index 4e6c7928c3..0bd2209745 100644
--- a/backends/platform/wii/gdb.txt
+++ b/backends/platform/wii/gdb.txt
@@ -1,4 +1,3 @@
target remote /dev/ttyUSB0
info threads
bt
-
diff --git a/backends/platform/wii/main.cpp b/backends/platform/wii/main.cpp
index 3965f51b7f..affe053b6a 100644
--- a/backends/platform/wii/main.cpp
+++ b/backends/platform/wii/main.cpp
@@ -247,4 +247,3 @@ int main(int argc, char *argv[]) {
#ifdef __cplusplus
}
#endif
-
diff --git a/backends/platform/wii/module.mk b/backends/platform/wii/module.mk
index 00eb0d7e49..88e75fba26 100644
--- a/backends/platform/wii/module.mk
+++ b/backends/platform/wii/module.mk
@@ -12,4 +12,3 @@ MODULE_OBJS := \
MODULE_OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS))
OBJS := $(MODULE_OBJS) $(OBJS)
MODULE_DIRS += $(sort $(dir $(MODULE_OBJS)))
-
diff --git a/backends/platform/wii/options.cpp b/backends/platform/wii/options.cpp
index 8c12ad9b81..ede81343ca 100644
--- a/backends/platform/wii/options.cpp
+++ b/backends/platform/wii/options.cpp
@@ -315,4 +315,3 @@ void WiiOptionsDialog::save() {
ConfMan.flushToDisk();
}
-
diff --git a/backends/platform/wii/options.h b/backends/platform/wii/options.h
index 00d42bc2ef..9b500ef29f 100644
--- a/backends/platform/wii/options.h
+++ b/backends/platform/wii/options.h
@@ -77,4 +77,3 @@ private:
};
#endif
-
diff --git a/backends/platform/wii/osystem_events.cpp b/backends/platform/wii/osystem_events.cpp
index 389d3823e7..3ba66aed89 100644
--- a/backends/platform/wii/osystem_events.cpp
+++ b/backends/platform/wii/osystem_events.cpp
@@ -451,4 +451,3 @@ bool OSystem_Wii::pollEvent(Common::Event &event) {
return false;
}
-
diff --git a/backends/platform/wii/osystem_gfx.cpp b/backends/platform/wii/osystem_gfx.cpp
index 859e3a1395..83607984cc 100644
--- a/backends/platform/wii/osystem_gfx.cpp
+++ b/backends/platform/wii/osystem_gfx.cpp
@@ -20,6 +20,7 @@
*/
#define FORBIDDEN_SYMBOL_EXCEPTION_printf
+#define FORBIDDEN_SYMBOL_EXCEPTION_abort
#include <malloc.h>
@@ -746,4 +747,3 @@ void OSystem_Wii::setMouseCursor(const byte *buf, uint w, uint h, int hotspotX,
if ((_texMouse.palette) && (oldKeycolor != _mouseKeyColor))
_cursorPaletteDirty = true;
}
-
diff --git a/backends/platform/wii/osystem_sfx.cpp b/backends/platform/wii/osystem_sfx.cpp
index acab6df7e1..2e658e47aa 100644
--- a/backends/platform/wii/osystem_sfx.cpp
+++ b/backends/platform/wii/osystem_sfx.cpp
@@ -131,4 +131,3 @@ void OSystem_Wii::deinitSfx() {
free(sound_buffer[i]);
}
}
-
diff --git a/backends/platform/wii/wii.mk b/backends/platform/wii/wii.mk
index aed30523b2..7d2db68b4e 100644
--- a/backends/platform/wii/wii.mk
+++ b/backends/platform/wii/wii.mk
@@ -49,4 +49,3 @@ wiiloaddist: wiidist
$(DEVKITPPC)/bin/wiiload wiidist/scummvm.zip
.PHONY: wiiclean wiiload geckoupload wiigdb wiidebug wiidist wiiloaddist
-
diff --git a/backends/platform/wince/CEActionsPocket.cpp b/backends/platform/wince/CEActionsPocket.cpp
index a4786d330d..5980a41caa 100644
--- a/backends/platform/wince/CEActionsPocket.cpp
+++ b/backends/platform/wince/CEActionsPocket.cpp
@@ -137,6 +137,7 @@ void CEActionsPocket::initInstanceGame() {
bool is_tinsel = (gameid == "tinsel");
bool is_cruise = (gameid == "cruise");
bool is_made = (gameid == "made");
+ bool is_sci = (gameid == "sci");
GUI_Actions::initInstanceGame();
@@ -214,12 +215,14 @@ void CEActionsPocket::initInstanceGame() {
_key_action[POCKET_ACTION_MULTI].setKey(Common::ASCII_F1, SDLK_F1); // bargon : F1 to start
else if (gameid == "atlantis")
_key_action[POCKET_ACTION_MULTI].setKey(0, SDLK_KP0); // fate of atlantis : Ins to sucker-punch
+ else if (is_simon)
+ _key_action[POCKET_ACTION_MULTI].setKey(Common::ASCII_F10, SDLK_F10); // F10
else
_key_action[POCKET_ACTION_MULTI].setKey('V', SDLK_v, KMOD_SHIFT); // FT cheat : shift-V
// Key bind method
_action_enabled[POCKET_ACTION_BINDKEYS] = true;
// Disable double-tap right-click for convenience
- if (is_tinsel || is_cruise)
+ if (is_tinsel || is_cruise || is_sci)
if (!ConfMan.hasKey("no_doubletap_rightclick")) {
ConfMan.setBool("no_doubletap_rightclick", true);
ConfMan.flushToDisk();
@@ -267,6 +270,15 @@ bool CEActionsPocket::perform(GUI::ActionType action, bool pushed) {
else
_key_action[action].setKey(SDLK_s);
}
+ if (action == POCKET_ACTION_SKIP && ConfMan.get("gameid") == "agi") {
+ // In several AGI games (for example SQ2) it is needed to press F10 to exit from
+ // a screen. But we still want be able to skip normally with the skip button.
+ // Because of this, we inject a F10 keystroke here (this works and doesn't seem
+ // to have side-effects)
+ _key_action[action].setKey(Common::ASCII_F10, SDLK_F10); // F10
+ EventsBuffer::simulateKey(&_key_action[action], true);
+ _key_action[action].setKey(KEY_ALL_SKIP);
+ }
EventsBuffer::simulateKey(&_key_action[action], true);
return true;
case POCKET_ACTION_KEYBOARD:
diff --git a/backends/platform/wince/CEActionsSmartphone.cpp b/backends/platform/wince/CEActionsSmartphone.cpp
index b12dadabb6..2cce288323 100644
--- a/backends/platform/wince/CEActionsSmartphone.cpp
+++ b/backends/platform/wince/CEActionsSmartphone.cpp
@@ -128,6 +128,7 @@ void CEActionsSmartphone::initInstanceGame() {
bool is_tinsel = (gameid == "tinsel");
bool is_cruise = (gameid == "cruise");
bool is_made = (gameid == "made");
+ bool is_sci = (gameid == "sci");
GUI_Actions::initInstanceGame();
@@ -180,12 +181,14 @@ void CEActionsSmartphone::initInstanceGame() {
_key_action[SMARTPHONE_ACTION_MULTI].setKey(Common::ASCII_F1, SDLK_F1); // bargon : F1 to start
else if (gameid == "atlantis")
_key_action[SMARTPHONE_ACTION_MULTI].setKey(0, SDLK_KP0); // fate of atlantis : Ins to sucker-punch
+ else if (is_simon)
+ _key_action[SMARTPHONE_ACTION_MULTI].setKey(Common::ASCII_F10, SDLK_F10); // F10
else
_key_action[SMARTPHONE_ACTION_MULTI].setKey('V', SDLK_v, KMOD_SHIFT); // FT cheat : shift-V
// Bind keys
_action_enabled[SMARTPHONE_ACTION_BINDKEYS] = true;
// Disable double-tap right-click for convenience
- if (is_tinsel || is_cruise)
+ if (is_tinsel || is_cruise || is_sci)
if (!ConfMan.hasKey("no_doubletap_rightclick")) {
ConfMan.setBool("no_doubletap_rightclick", true);
ConfMan.flushToDisk();
@@ -231,6 +234,15 @@ bool CEActionsSmartphone::perform(GUI::ActionType action, bool pushed) {
else
_key_action[action].setKey(SDLK_s);
}
+ if (action == SMARTPHONE_ACTION_SKIP && ConfMan.get("gameid") == "agi") {
+ // In several AGI games (for example SQ2) it is needed to press F10 to exit from
+ // a screen. But we still want be able to skip normally with the skip button.
+ // Because of this, we inject a F10 keystroke here (this works and doesn't seem
+ // to have side-effects)
+ _key_action[action].setKey(Common::ASCII_F10, SDLK_F10); // F10
+ EventsBuffer::simulateKey(&_key_action[action], true);
+ _key_action[action].setKey(KEY_ALL_SKIP);
+ }
EventsBuffer::simulateKey(&_key_action[action], true);
return true;
case SMARTPHONE_ACTION_RIGHTCLICK:
diff --git a/backends/platform/wince/CELauncherDialog.cpp b/backends/platform/wince/CELauncherDialog.cpp
index 9c832dd585..dd6076e0af 100644
--- a/backends/platform/wince/CELauncherDialog.cpp
+++ b/backends/platform/wince/CELauncherDialog.cpp
@@ -24,6 +24,7 @@
#define FORBIDDEN_SYMBOL_ALLOW_ALL
#include "backends/platform/wince/wince-sdl.h"
+#include "backends/graphics/wincesdl/wincesdl-graphics.h"
#include "CELauncherDialog.h"
@@ -34,6 +35,7 @@
#include "gui/browser.h"
#include "gui/message.h"
#include "gui/ThemeEval.h"
+#include "gui/widgets/list.h"
#include "common/config-manager.h"
@@ -63,9 +65,13 @@ public:
};
CELauncherDialog::CELauncherDialog() : GUI::LauncherDialog() {
+ ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->reset_panel();
}
void CELauncherDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
+ if ((cmd == 'STRT') || (cmd == kListItemActivatedCmd) || (cmd == kListItemDoubleClickedCmd)) {
+ ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->init_panel();
+ }
LauncherDialog::handleCommand(sender, cmd, data);
if (cmd == 'ABOU') {
CEAboutDialog about;
diff --git a/backends/platform/wince/CEScaler.cpp b/backends/platform/wince/CEScaler.cpp
index f07a7ec84b..66f7809a3a 100644
--- a/backends/platform/wince/CEScaler.cpp
+++ b/backends/platform/wince/CEScaler.cpp
@@ -86,4 +86,3 @@ void SmartphoneLandscape(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, ui
}
#endif
-
diff --git a/backends/platform/wince/CEgui/CEGUI.h b/backends/platform/wince/CEgui/CEGUI.h
index 4e44115476..8b2e3528e3 100644
--- a/backends/platform/wince/CEgui/CEGUI.h
+++ b/backends/platform/wince/CEgui/CEGUI.h
@@ -24,4 +24,3 @@
#include "Panel.h"
#include "ItemSwitch.h"
#include "PanelKeyboard.h"
-
diff --git a/backends/platform/wince/CEgui/PanelKeyboard.cpp b/backends/platform/wince/CEgui/PanelKeyboard.cpp
index 442d7fc68c..cab02150c5 100644
--- a/backends/platform/wince/CEgui/PanelKeyboard.cpp
+++ b/backends/platform/wince/CEgui/PanelKeyboard.cpp
@@ -96,4 +96,3 @@ bool PanelKeyboard::action(int x, int y, bool pushed) {
}
} // End of namespace CEGUI
-
diff --git a/backends/platform/wince/CEkeys/CEKeys.h b/backends/platform/wince/CEkeys/CEKeys.h
index ac4907704d..cf71b982f3 100644
--- a/backends/platform/wince/CEkeys/CEKeys.h
+++ b/backends/platform/wince/CEkeys/CEKeys.h
@@ -21,4 +21,3 @@
*/
#include "EventsBuffer.h"
-
diff --git a/backends/platform/wince/CEkeys/EventsBuffer.cpp b/backends/platform/wince/CEkeys/EventsBuffer.cpp
index d5818c3731..c993798dc8 100644
--- a/backends/platform/wince/CEkeys/EventsBuffer.cpp
+++ b/backends/platform/wince/CEkeys/EventsBuffer.cpp
@@ -76,5 +76,3 @@ bool EventsBuffer::simulateMouseRightClick(int x, int y, bool pushed) {
return (SDL_PushEvent(&ev) == 0);
}
}
-
-
diff --git a/backends/platform/wince/README-WinCE.txt b/backends/platform/wince/README-WinCE.txt
index c48d9ca998..429168c293 100644
--- a/backends/platform/wince/README-WinCE.txt
+++ b/backends/platform/wince/README-WinCE.txt
@@ -1,10 +1,40 @@
ScummVM Windows CE FAQ
-Last updated: 2011-05-27
-Release version: 1.3.0
+Last updated: 2011-10-15
+Release version: 1.4.0
------------------------------------------------------------------------
New in this version
-------------------
+1.4.0:
+- Changed the memory management so that it is finally possible to break the
+ 32MB per process barrier on Windows CE. It should be possible now (finally)
+ to play nearly every game with the "big" binary (scummvm.exe, which includes
+ all game engines).
+- Changed default values for "high_sample_rate" & "FM_high_quality" to "true"
+ as most devices today are fast enough to handle this. It's still possible to
+ set this to "false" if you have a slower device.
+- Fix for TeenAgent & Hugo engines (both weren't running at all, crashed right
+ at the beginning)
+- Discworld 2 is now playable (works now because of the new memory management)
+- Replaced the game mass-adding functionality with the functionality used on
+ all other platforms. It now shows progress while searching for games.
+
+1.3.1:
+- Fix for Normal2xAspect scaler which was causing screen update issues in some
+ games.
+- Fix for Normal1xAspect scaler which caused problems in the bottom part of the
+ screen when toolbar was hidden.
+- Fix for freelook mode.
+- Fix for timer manager, caused timing issues in some games.
+- Activated runtime language detection for ScummVM gui.
+- Toolbar is now hidden when returning to the game list.
+- Double-tap right-click emulation is now turned off for SCI games by default.
+- Added a new option "no_doubletap_paneltoggle" for scummvm.ini to disable
+ toolbar toggling when double-tapping on the top part of the screen.
+- SDL library related fixes:
+ * Fix for screen/mouse-cursor rotation issues (fixes erratic touchscreen
+ behaviour)
+ * Fix for hardware keyboard on some devices (HTC Touch Pro, etc.)
1.3.0:
This is the first official Windows CE release since 1.1.1.
@@ -345,14 +375,13 @@ Some parameters are specific to this port :
Game specific sections (f.e. [monkey2]) - performance options
* high_sample_rate bool Desktop quality (22 kHz) sound output if
- set. The default is 11 kHz.
- If you have a fast device, you can set this
- to true to enjoy better sound effects and
- music.
+ set. This is the default.
+ If you have a slow device, you can set this
+ to false to prevent lags/delays in the game.
* FM_high_quality bool Desktop quality FM synthesis if set. Lower
- quality otherwise. The default is low
+ quality otherwise. The default is high
quality. You can change this if you have a
- fast device.
+ slow device.
* sound_thread_priority int Set the priority of the sound thread (0, 1,
2). Depending on the release, this is set
to 1 internally (above normal).
diff --git a/backends/platform/wince/missing/assert.h b/backends/platform/wince/missing/assert.h
index 734b8f9482..e9c871da60 100644
--- a/backends/platform/wince/missing/assert.h
+++ b/backends/platform/wince/missing/assert.h
@@ -6,4 +6,3 @@ void CDECL _declspec(noreturn) error(const char *s, ...);
#define assert(e) ((e) ? 0 : (::error("Assertion failed %s (%s, %d)", #e, __FILE__, __LINE__)))
#define abort() ::error("Abort (%s, %d)", __FILE__, __LINE__)
-
diff --git a/backends/platform/wince/missing/io.h b/backends/platform/wince/missing/io.h
index de492cac68..b2cb2abd8e 100644
--- a/backends/platform/wince/missing/io.h
+++ b/backends/platform/wince/missing/io.h
@@ -9,4 +9,3 @@ typedef void FILE;
#endif
FILE *wce_fopen(const char *fname, const char *fmode);
#define fopen wce_fopen
-
diff --git a/backends/platform/wince/wince-sdl.cpp b/backends/platform/wince/wince-sdl.cpp
index 9b1ffe817c..4e17827e5c 100644
--- a/backends/platform/wince/wince-sdl.cpp
+++ b/backends/platform/wince/wince-sdl.cpp
@@ -42,6 +42,7 @@
#include "audio/mixer_intern.h"
#include "audio/fmopl.h"
+#include "backends/mutex/sdl/sdl-mutex.h"
#include "backends/timer/sdl/sdl-timer.h"
#include "gui/Actions.h"
@@ -71,6 +72,50 @@
extern "C" _CRTIMP FILE *__cdecl _wfreopen(const wchar_t *, const wchar_t *, FILE *);
#endif
+#ifdef WRAP_MALLOC
+
+extern "C" void *__real_malloc(size_t size);
+extern "C" void __real_free(void *ptr);
+
+extern "C" void *__wrap_malloc(size_t size) {
+/*
+ void *ptr = __real_malloc(size);
+ printf("malloc(%d) = %p\n", size, ptr);
+ return ptr;
+*/
+ if (size < 64 * 1024) {
+ void *ptr = __real_malloc(size+4);
+// printf("malloc(%d) = %p\n", size, ptr);
+ if (ptr != NULL) {
+ *((HANDLE*)ptr) = 0;
+ return 4+(char*)ptr;
+ }
+ return NULL;
+ }
+ HANDLE H = CreateFileMapping((HANDLE)INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, size+4, 0);
+ void *ptr = MapViewOfFile(H, FILE_MAP_ALL_ACCESS, 0, 0, 0);
+ *((HANDLE*)ptr) = H;
+ return 4+(char*)ptr;
+}
+
+extern "C" void __wrap_free(void *ptr) {
+/*
+ __real_free(ptr);
+ printf("free(%p)\n", ptr);
+*/
+ if (ptr != NULL) {
+ HANDLE H = *(HANDLE*)((char *)ptr-4);
+ if (H == 0) {
+ __real_free((char*)ptr-4);
+ return;
+ }
+ UnmapViewOfFile((char *)ptr-4);
+ CloseHandle(H);
+ }
+}
+
+#endif
+
using namespace CEGUI;
// ********************************************************************************************
@@ -353,9 +398,9 @@ void drawError(char *error) {
}
// ********************************************************************************************
-static DefaultTimerManager *_int_timer = NULL;
static Uint32 timer_handler_wrapper(Uint32 interval) {
- _int_timer->handler();
+ DefaultTimerManager *tm = (DefaultTimerManager *)g_system->getTimerManager();
+ tm->handler();
return interval;
}
@@ -379,21 +424,7 @@ void OSystem_WINCE3::initBackend() {
((WINCESdlEventSource *)_eventSource)->init((WINCESdlGraphicsManager *)_graphicsManager);
-
- // FIXME: This timer manager is *not accesible* from the outside.
- // Instead the timer manager setup by OSystem_SDL is visible on the outside.
- // Since the WinCE backend actually seems to work, my guess is that
- // SDL_AddTimer works after all and the following code is redundant.
- // However it may be, this must be resolved one way or another.
-
- // Create the timer. CE SDL does not support multiple timers (SDL_AddTimer).
- // We work around this by using the SetTimer function, since we only use
- // one timer in scummvm (for the time being)
- _int_timer = new DefaultTimerManager();
- //_timerID = NULL; // OSystem_SDL will call removetimer with this, it's ok
- SDL_SetTimer(10, &timer_handler_wrapper);
-
- // Chain init
+ // Call parent implementation of this method
OSystem_SDL::initBackend();
// Initialize global key mapping
@@ -404,9 +435,6 @@ void OSystem_WINCE3::initBackend() {
GUI_Actions::Instance()->saveMapping(); // write defaults
}
- // Call parent implementation of this method
- //OSystem_SDL::initBackend();
-
_inited = true;
}
@@ -555,6 +583,24 @@ void OSystem_WINCE3::initSDL() {
}
}
+void OSystem_WINCE3::init() {
+ // Create SdlMutexManager instance as the TimerManager relies on the
+ // MutexManager being already initialized
+ if (_mutexManager == 0)
+ _mutexManager = new SdlMutexManager();
+
+ // Create the timer. CE SDL does not support multiple timers (SDL_AddTimer).
+ // We work around this by using the SetTimer function, since we only use
+ // one timer in scummvm (for the time being)
+ if (_timerManager == 0) {
+ _timerManager = new DefaultTimerManager();
+ SDL_SetTimer(10, &timer_handler_wrapper);
+ }
+
+ // Call parent implementation of this method
+ OSystem_SDL::init();
+}
+
void OSystem_WINCE3::quit() {
fclose(stdout_file);
fclose(stderr_file);
diff --git a/backends/platform/wince/wince-sdl.h b/backends/platform/wince/wince-sdl.h
index 481956c19a..b4f323c9e2 100644
--- a/backends/platform/wince/wince-sdl.h
+++ b/backends/platform/wince/wince-sdl.h
@@ -52,6 +52,7 @@ public:
void initBackend();
// Overloaded from SDL backend
+ void init();
void quit();
virtual Common::String getSystemLanguage() const;
diff --git a/backends/platform/wince/wince.mk b/backends/platform/wince/wince.mk
index cac3ad4e8f..c5f3274747 100644
--- a/backends/platform/wince/wince.mk
+++ b/backends/platform/wince/wince.mk
@@ -1,3 +1,7 @@
+ifdef WRAP_MALLOC
+ LDFLAGS += -Wl,--wrap,malloc -Wl,--wrap,free
+endif
+
backends/platform/wince/PocketSCUMM.o: $(srcdir)/backends/platform/wince/PocketSCUMM.rc
$(QUIET)$(MKDIR) $(*D)
$(WINDRES) $(WINDRESFLAGS) -I$(srcdir)/backends/platform/wince $< $@
diff --git a/backends/plugins/ds/ds-provider.cpp b/backends/plugins/ds/ds-provider.cpp
index ff4cbe5f96..21ec157e5f 100644
--- a/backends/plugins/ds/ds-provider.cpp
+++ b/backends/plugins/ds/ds-provider.cpp
@@ -43,4 +43,3 @@ Plugin *DSPluginProvider::createPlugin(const Common::FSNode &node) const {
}
#endif // defined(DYNAMIC_MODULES) && defined(__DS__)
-
diff --git a/backends/plugins/ds/ds-provider.h b/backends/plugins/ds/ds-provider.h
index df8307a52d..1d806a03bd 100644
--- a/backends/plugins/ds/ds-provider.h
+++ b/backends/plugins/ds/ds-provider.h
@@ -35,4 +35,3 @@ public:
#endif // BACKENDS_PLUGINS_DS_PROVIDER_H
#endif // defined(DYNAMIC_MODULES) && defined(__DS__)
-
diff --git a/backends/plugins/elf/arm-loader.cpp b/backends/plugins/elf/arm-loader.cpp
index 12204ef68f..f8deac9c88 100644
--- a/backends/plugins/elf/arm-loader.cpp
+++ b/backends/plugins/elf/arm-loader.cpp
@@ -127,4 +127,3 @@ bool ARMDLObject::relocateRels(Elf32_Ehdr *ehdr, Elf32_Shdr *shdr) {
}
#endif /* defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) && defined(ARM_TARGET) */
-
diff --git a/backends/plugins/elf/arm-loader.h b/backends/plugins/elf/arm-loader.h
index 60bc4f8720..598517d2ef 100644
--- a/backends/plugins/elf/arm-loader.h
+++ b/backends/plugins/elf/arm-loader.h
@@ -38,4 +38,3 @@ protected:
#endif /* defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) && defined(ARM_TARGET) */
#endif /* BACKENDS_PLUGINS_ARM_LOADER_H */
-
diff --git a/backends/plugins/elf/elf-loader.cpp b/backends/plugins/elf/elf-loader.cpp
index 4335ea6108..d75010196a 100644
--- a/backends/plugins/elf/elf-loader.cpp
+++ b/backends/plugins/elf/elf-loader.cpp
@@ -489,4 +489,3 @@ void *DLObject::symbol(const char *name) {
}
#endif /* defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) */
-
diff --git a/backends/plugins/elf/elf-loader.h b/backends/plugins/elf/elf-loader.h
index a953507631..58cc7714cf 100644
--- a/backends/plugins/elf/elf-loader.h
+++ b/backends/plugins/elf/elf-loader.h
@@ -102,4 +102,3 @@ public:
#endif /* defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) */
#endif /* BACKENDS_PLUGINS_ELF_LOADER_H */
-
diff --git a/backends/plugins/elf/elf-provider.cpp b/backends/plugins/elf/elf-provider.cpp
index 84054f44cb..f637596d8d 100644
--- a/backends/plugins/elf/elf-provider.cpp
+++ b/backends/plugins/elf/elf-provider.cpp
@@ -207,4 +207,3 @@ bool ELFPluginProvider::isPluginFilename(const Common::FSNode &node) const {
}
#endif // defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER)
-
diff --git a/backends/plugins/elf/elf-provider.h b/backends/plugins/elf/elf-provider.h
index 62ea930829..a966f371f6 100644
--- a/backends/plugins/elf/elf-provider.h
+++ b/backends/plugins/elf/elf-provider.h
@@ -92,4 +92,3 @@ protected:
#endif // defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER)
#endif /* BACKENDS_PLUGINS_ELF_PROVIDER_H */
-
diff --git a/backends/plugins/elf/elf32.h b/backends/plugins/elf/elf32.h
index aecedf5a37..1ecc68a8f0 100644
--- a/backends/plugins/elf/elf32.h
+++ b/backends/plugins/elf/elf32.h
@@ -246,4 +246,3 @@ typedef struct {
#endif // defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER)
#endif /* BACKENDS_ELF_H */
-
diff --git a/backends/plugins/elf/memory-manager.cpp b/backends/plugins/elf/memory-manager.cpp
index 02669b3647..47b77a3ec2 100644
--- a/backends/plugins/elf/memory-manager.cpp
+++ b/backends/plugins/elf/memory-manager.cpp
@@ -29,7 +29,9 @@
#include "common/util.h"
#include <malloc.h>
+namespace Common {
DECLARE_SINGLETON(ELFMemoryManager);
+}
ELFMemoryManager::ELFMemoryManager() :
_heap(0), _heapSize(0), _heapAlign(0),
@@ -170,4 +172,3 @@ void ELFMemoryManager::deallocateFromHeap(void *ptr) {
}
#endif /* defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) */
-
diff --git a/backends/plugins/elf/mips-loader.cpp b/backends/plugins/elf/mips-loader.cpp
index e043c9647f..6c0e688783 100644
--- a/backends/plugins/elf/mips-loader.cpp
+++ b/backends/plugins/elf/mips-loader.cpp
@@ -337,4 +337,3 @@ void MIPSDLObject::freeShortsSegment() {
}
#endif /* defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) && defined(MIPS_TARGET) */
-
diff --git a/backends/plugins/elf/mips-loader.h b/backends/plugins/elf/mips-loader.h
index 3066589c9b..1103e939ce 100644
--- a/backends/plugins/elf/mips-loader.h
+++ b/backends/plugins/elf/mips-loader.h
@@ -58,4 +58,3 @@ public:
#endif /* defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) && defined(MIPS_TARGET) */
#endif /* BACKENDS_PLUGINS_MIPS_LOADER_H */
-
diff --git a/backends/plugins/elf/ppc-loader.cpp b/backends/plugins/elf/ppc-loader.cpp
index 2f7042c682..4c9290ad5e 100644
--- a/backends/plugins/elf/ppc-loader.cpp
+++ b/backends/plugins/elf/ppc-loader.cpp
@@ -123,4 +123,3 @@ bool PPCDLObject::relocateRels(Elf32_Ehdr *ehdr, Elf32_Shdr *shdr) {
}
#endif /* defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) && defined(PPC_TARGET) */
-
diff --git a/backends/plugins/elf/ppc-loader.h b/backends/plugins/elf/ppc-loader.h
index 9aa6c949f1..8614476a92 100644
--- a/backends/plugins/elf/ppc-loader.h
+++ b/backends/plugins/elf/ppc-loader.h
@@ -38,4 +38,3 @@ protected:
#endif /* defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) && defined(PPC_TARGET) */
#endif /* BACKENDS_PLUGINS_PPC_LOADER_H */
-
diff --git a/backends/plugins/elf/shorts-segment-manager.cpp b/backends/plugins/elf/shorts-segment-manager.cpp
index b3a9531c2d..993a538f6c 100644
--- a/backends/plugins/elf/shorts-segment-manager.cpp
+++ b/backends/plugins/elf/shorts-segment-manager.cpp
@@ -33,7 +33,9 @@ extern char __plugin_hole_start; // Indicates start of hole in program file for
extern char __plugin_hole_end; // Indicates end of hole in program file
extern char _gp[]; // Value of gp register
+namespace Common {
DECLARE_SINGLETON(ShortSegmentManager); // For singleton
+}
ShortSegmentManager::ShortSegmentManager() {
_shortsStart = &__plugin_hole_start ; //shorts segment begins at the plugin hole we made when linking
@@ -83,5 +85,3 @@ void ShortSegmentManager::deleteSegment(ShortSegmentManager::Segment *seg) {
}
#endif // defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) && defined(MIPS_TARGET)
-
-
diff --git a/backends/plugins/elf/shorts-segment-manager.h b/backends/plugins/elf/shorts-segment-manager.h
index 8293d55c08..34e233a2f4 100644
--- a/backends/plugins/elf/shorts-segment-manager.h
+++ b/backends/plugins/elf/shorts-segment-manager.h
@@ -111,4 +111,3 @@ private:
#endif // defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) && defined(MIPS_TARGET)
#endif /* SHORTS_SEGMENT_MANAGER_H */
-
diff --git a/backends/plugins/elf/version.cpp b/backends/plugins/elf/version.cpp
index 593a17fb2b..9f64870500 100644
--- a/backends/plugins/elf/version.cpp
+++ b/backends/plugins/elf/version.cpp
@@ -26,4 +26,3 @@
const char *gScummVMPluginBuildDate __attribute__((visibility("hidden"))) =
__DATE__ " " __TIME__ ;
#endif
-
diff --git a/backends/plugins/elf/version.h b/backends/plugins/elf/version.h
index 915132e8c4..1f6924028b 100644
--- a/backends/plugins/elf/version.h
+++ b/backends/plugins/elf/version.h
@@ -29,4 +29,3 @@ extern const char *gScummVMPluginBuildDate;
#endif
#endif
-
diff --git a/backends/plugins/ps2/ps2-provider.cpp b/backends/plugins/ps2/ps2-provider.cpp
index 7c7409eaf9..50cddb05e0 100644
--- a/backends/plugins/ps2/ps2-provider.cpp
+++ b/backends/plugins/ps2/ps2-provider.cpp
@@ -41,4 +41,3 @@ Plugin *PS2PluginProvider::createPlugin(const Common::FSNode &node) const {
}
#endif // defined(DYNAMIC_MODULES) && defined(__PLAYSTATION2__)
-
diff --git a/backends/plugins/ps2/ps2-provider.h b/backends/plugins/ps2/ps2-provider.h
index b9006b1716..f4498204b4 100644
--- a/backends/plugins/ps2/ps2-provider.h
+++ b/backends/plugins/ps2/ps2-provider.h
@@ -35,4 +35,3 @@ public:
#endif // BACKENDS_PLUGINS_PS2_PROVIDER_H
#endif // defined(DYNAMIC_MODULES) && defined(__PLAYSTATION2__)
-
diff --git a/backends/plugins/psp/psp-provider.cpp b/backends/plugins/psp/psp-provider.cpp
index 0c41af24a1..1d8cad6b50 100644
--- a/backends/plugins/psp/psp-provider.cpp
+++ b/backends/plugins/psp/psp-provider.cpp
@@ -43,4 +43,3 @@ Plugin *PSPPluginProvider::createPlugin(const Common::FSNode &node) const {
}
#endif // defined(DYNAMIC_MODULES) && defined(__PSP__)
-
diff --git a/backends/plugins/psp/psp-provider.h b/backends/plugins/psp/psp-provider.h
index 0cc0457740..4ace3e7f4b 100644
--- a/backends/plugins/psp/psp-provider.h
+++ b/backends/plugins/psp/psp-provider.h
@@ -35,4 +35,3 @@ public:
#endif // BACKENDS_PLUGINS_PSP_PROVIDER_H
#endif // defined(DYNAMIC_MODULES) && defined(__PSP__)
-
diff --git a/backends/plugins/wii/wii-provider.cpp b/backends/plugins/wii/wii-provider.cpp
index fa85588348..f96254eabe 100644
--- a/backends/plugins/wii/wii-provider.cpp
+++ b/backends/plugins/wii/wii-provider.cpp
@@ -43,4 +43,3 @@ Plugin *WiiPluginProvider::createPlugin(const Common::FSNode &node) const {
}
#endif // defined(DYNAMIC_MODULES) && defined(__WII__)
-
diff --git a/backends/plugins/wii/wii-provider.h b/backends/plugins/wii/wii-provider.h
index 573a8e7e59..fb847e1024 100644
--- a/backends/plugins/wii/wii-provider.h
+++ b/backends/plugins/wii/wii-provider.h
@@ -35,4 +35,3 @@ public:
#endif // BACKENDS_PLUGINS_WII_PROVIDER_H
#endif // defined(DYNAMIC_MODULES) && defined(__WII__)
-
diff --git a/backends/saves/psp/psp-saves.cpp b/backends/saves/psp/psp-saves.cpp
index 006a4e815d..65003e9fb9 100644
--- a/backends/saves/psp/psp-saves.cpp
+++ b/backends/saves/psp/psp-saves.cpp
@@ -78,4 +78,3 @@ void PSPSaveFileManager::checkPath(const Common::FSNode &dir) {
PowerMan.endCriticalSection();
}
#endif
-
diff --git a/backends/taskbar/unity/unity-taskbar.cpp b/backends/taskbar/unity/unity-taskbar.cpp
index 49c56b746d..f36e2bf628 100644
--- a/backends/taskbar/unity/unity-taskbar.cpp
+++ b/backends/taskbar/unity/unity-taskbar.cpp
@@ -8,29 +8,30 @@
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
-
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
-
+ *
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
- *
*/
+#define FORBIDDEN_SYMBOL_EXCEPTION_unistd_h
+#define FORBIDDEN_SYMBOL_EXCEPTION_time_h
#include "common/scummsys.h"
-#if defined(UNIX) && defined(USE_TASKBAR) && defined(USE_TASKBAR_UNITY)
+#if defined(POSIX) && defined(USE_TASKBAR) && defined(USE_TASKBAR_UNITY)
#include "backends/taskbar/unity/unity-taskbar.h"
#include "common/textconsole.h"
+#include <unity.h>
+
UnityTaskbarManager::UnityTaskbarManager() {
g_type_init();
diff --git a/backends/taskbar/unity/unity-taskbar.h b/backends/taskbar/unity/unity-taskbar.h
index 9f14b44d8f..d1d9430bcd 100644
--- a/backends/taskbar/unity/unity-taskbar.h
+++ b/backends/taskbar/unity/unity-taskbar.h
@@ -8,31 +8,29 @@
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
-
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
-
+ *
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
- *
*/
#ifndef BACKEND_UNITY_TASKBAR_H
#define BACKEND_UNITY_TASKBAR_H
-#if defined(UNIX) && defined(USE_TASKBAR) && defined(USE_TASKBAR_UNITY)
+#if defined(POSIX) && defined(USE_TASKBAR) && defined(USE_TASKBAR_UNITY)
#include "common/events.h"
#include "common/str.h"
#include "common/taskbar.h"
-#include <unity.h>
+typedef struct _GMainLoop GMainLoop;
+typedef struct _UnityLauncherEntry UnityLauncherEntry;
class UnityTaskbarManager : public Common::TaskbarManager, public Common::EventSource {
public:
diff --git a/backends/taskbar/win32/mingw-compat.h b/backends/taskbar/win32/mingw-compat.h
index 06968b62ff..55105407c6 100644
--- a/backends/taskbar/win32/mingw-compat.h
+++ b/backends/taskbar/win32/mingw-compat.h
@@ -8,23 +8,20 @@
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
-
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
-
+ *
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
- *
*/
// TODO: Remove header when the latest changes to the Windows SDK have been integrated into MingW
-// For reference, the interface definitions here are imported the SDK headers and from the
+// For reference, the interface definitions here are imported the SDK headers and from the
// EcWin7 project (https://code.google.com/p/dukto/)
#ifndef BACKEND_WIN32_TASKBAR_MINGW_H
@@ -42,8 +39,14 @@
#include <commctrl.h>
#include <initguid.h>
#include <shlwapi.h>
+#include <shlguid.h>
#define CMIC_MASK_ASYNCOK SEE_MASK_ASYNCOK
+extern const GUID CLSID_ShellLink;
+
+// Shard enumeration value
+#define SHARD_LINK 0x00000006
+
// Taskbar GUID definitions
DEFINE_GUID(CLSID_TaskbarList,0x56fdf344,0xfd6d,0x11d0,0x95,0x8a,0x0,0x60,0x97,0xc9,0xa0,0x90);
DEFINE_GUID(IID_ITaskbarList3,0xea1afb91,0x9e28,0x4b86,0x90,0xE9,0x9e,0x9f,0x8a,0x5e,0xef,0xaf);
@@ -67,6 +70,9 @@ DECLARE_INTERFACE_(IPropertyStore, IUnknown) {
STDMETHOD (GetValue) (REFPROPERTYKEY key, PROPVARIANT *pv) PURE;
STDMETHOD (SetValue) (REFPROPERTYKEY key, REFPROPVARIANT propvar) PURE;
STDMETHOD (Commit) (void) PURE;
+
+private:
+ ~IPropertyStore();
};
typedef IPropertyStore *LPIPropertyStore;
@@ -131,6 +137,9 @@ DECLARE_INTERFACE_(ITaskbarList3, IUnknown) {
STDMETHOD (SetOverlayIcon) (THIS_ HWND hwnd, HICON hIcon, LPCWSTR pszDescription) PURE;
STDMETHOD (SetThumbnailTooltip) (THIS_ HWND hwnd, LPCWSTR pszTip) PURE;
STDMETHOD (SetThumbnailClip) (THIS_ HWND hwnd, RECT *prcClip) PURE;
+
+private:
+ ~ITaskbarList3();
};
typedef ITaskbarList3 *LPITaskbarList3;
diff --git a/backends/taskbar/win32/win32-taskbar.cpp b/backends/taskbar/win32/win32-taskbar.cpp
index 0cfd81e3f2..046ddb1cd0 100644
--- a/backends/taskbar/win32/win32-taskbar.cpp
+++ b/backends/taskbar/win32/win32-taskbar.cpp
@@ -8,19 +8,16 @@
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
-
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
-
+ *
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
- *
*/
// We cannot use common/scummsys.h directly as it will include
@@ -66,7 +63,7 @@
// System.Title property key, values taken from http://msdn.microsoft.com/en-us/library/bb787584.aspx
const PROPERTYKEY PKEY_Title = { /* fmtid = */ { 0xF29F85E0, 0x4FF9, 0x1068, { 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9 } }, /* propID = */ 2 };
-Win32TaskbarManager::Win32TaskbarManager() {
+Win32TaskbarManager::Win32TaskbarManager() : _taskbar(NULL), _count(0), _icon(NULL) {
// Do nothing if not running on Windows 7 or later
if (!isWin7OrLater())
return;
@@ -96,6 +93,9 @@ Win32TaskbarManager::~Win32TaskbarManager() {
_taskbar->Release();
_taskbar = NULL;
+ if (_icon)
+ DestroyIcon(_icon);
+
CoUninitialize();
}
@@ -144,6 +144,123 @@ void Win32TaskbarManager::setProgressState(TaskbarProgressState state) {
_taskbar->SetProgressState(getHwnd(), (TBPFLAG)state);
}
+void Win32TaskbarManager::setCount(int count) {
+ if (_taskbar == NULL)
+ return;
+
+ if (count == 0) {
+ _taskbar->SetOverlayIcon(getHwnd(), NULL, L"");
+ return;
+ }
+
+ // FIXME: This isn't really nice and could use a cleanup.
+ // The only good thing is that it doesn't use GDI+
+ // and thus does not have a dependancy on it,
+ // with the downside of being a lot more ugly.
+ // Maybe replace it by a Graphic::Surface, use
+ // ScummVM font drawing and extract the contents at
+ // the end?
+
+ if (_count != count || _icon == NULL) {
+ // Cleanup previous icon
+ _count = count;
+ if (_icon)
+ DestroyIcon(_icon);
+
+ Common::String countString = (count < 100 ? Common::String::format("%d", count) : "9+");
+
+ // Create transparent background
+ BITMAPV5HEADER bi;
+ ZeroMemory(&bi, sizeof(BITMAPV5HEADER));
+ bi.bV5Size = sizeof(BITMAPV5HEADER);
+ bi.bV5Width = 16;
+ bi.bV5Height = 16;
+ bi.bV5Planes = 1;
+ bi.bV5BitCount = 32;
+ bi.bV5Compression = BI_RGB;
+ // Set 32 BPP alpha format
+ bi.bV5RedMask = 0x00FF0000;
+ bi.bV5GreenMask = 0x0000FF00;
+ bi.bV5BlueMask = 0x000000FF;
+ bi.bV5AlphaMask = 0xFF000000;
+
+ // Get DC
+ HDC hdc;
+ hdc = GetDC(NULL);
+ HDC hMemDC = CreateCompatibleDC(hdc);
+ ReleaseDC(NULL, hdc);
+
+ // Create a bitmap mask
+ HBITMAP hBitmapMask = CreateBitmap(16, 16, 1, 1, NULL);
+
+ // Create the DIB section with an alpha channel
+ void *lpBits;
+ HBITMAP hBitmap = CreateDIBSection(hdc, (BITMAPINFO *)&bi, DIB_RGB_COLORS, (void **)&lpBits, NULL, 0);
+ HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
+
+ // Load the icon background
+ HICON hIconBackground = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(1002 /* IDI_COUNT */));
+ DrawIconEx(hMemDC, 0, 0, hIconBackground, 16, 16, 0, 0, DI_NORMAL);
+ DeleteObject(hIconBackground);
+
+ // Draw the count
+ LOGFONT lFont;
+ memset(&lFont, 0, sizeof(LOGFONT));
+ lFont.lfHeight = 10;
+ lFont.lfWeight = FW_BOLD;
+ lFont.lfItalic = 1;
+ strcpy(lFont.lfFaceName, "Arial");
+
+ HFONT hFont = CreateFontIndirect(&lFont);
+ SelectObject(hMemDC, hFont);
+
+ RECT rect;
+ SetRect(&rect, 4, 4, 12, 12);
+ SetTextColor(hMemDC, RGB(48, 48, 48));
+ SetBkMode(hMemDC, TRANSPARENT);
+ DrawText(hMemDC, countString.c_str(), -1, &rect, DT_NOCLIP|DT_CENTER);
+
+ // Set the text alpha to fully opaque (we consider the data inside the text rect)
+ DWORD *lpdwPixel = (DWORD *)lpBits;
+ for (int x = 3; x < 12; x++) {
+ for(int y = 3; y < 12; y++) {
+ unsigned char *p = (unsigned char *)(lpdwPixel + x * 16 + y);
+
+ if (p[0] != 0 && p[1] != 0 && p[2] != 0)
+ p[3] = 255;
+ }
+ }
+
+ // Cleanup DC
+ DeleteObject(hFont);
+ SelectObject(hMemDC, hOldBitmap);
+ DeleteDC(hMemDC);
+
+ // Prepare our new icon
+ ICONINFO ii;
+ ii.fIcon = FALSE;
+ ii.xHotspot = 0;
+ ii.yHotspot = 0;
+ ii.hbmMask = hBitmapMask;
+ ii.hbmColor = hBitmap;
+
+ _icon = CreateIconIndirect(&ii);
+
+ DeleteObject(hBitmap);
+ DeleteObject(hBitmapMask);
+
+ if (!_icon) {
+ warning("[Win32TaskbarManager::setCount] Cannot create icon for count");
+ return;
+ }
+ }
+
+ // Sets the overlay icon
+ LPWSTR desc = ansiToUnicode(Common::String::format("Found games: %d", count).c_str());
+ _taskbar->SetOverlayIcon(getHwnd(), _icon, desc);
+ delete[] desc;
+}
+
void Win32TaskbarManager::addRecent(const Common::String &name, const Common::String &description) {
//warning("[Win32TaskbarManager::addRecent] Adding recent list entry: %s (%s)", name.c_str(), description.c_str());
@@ -200,6 +317,15 @@ void Win32TaskbarManager::addRecent(const Common::String &name, const Common::St
}
}
+void Win32TaskbarManager::notifyError() {
+ setProgressState(Common::TaskbarManager::kTaskbarError);
+ setProgressValue(1, 1);
+}
+
+void Win32TaskbarManager::clearError() {
+ setProgressState(kTaskbarNoProgress);
+}
+
Common::String Win32TaskbarManager::getIconPath(Common::String target) {
// We first try to look for a iconspath configuration variable then
// fallback to the extra path
@@ -232,6 +358,28 @@ Common::String Win32TaskbarManager::getIconPath(Common::String target) {
return "";
}
+// VerSetConditionMask and VerifyVersionInfo didn't appear until Windows 2000,
+// so we need to check for them at runtime
+LONGLONG VerSetConditionMaskFunc(ULONGLONG dwlConditionMask, DWORD dwTypeMask, BYTE dwConditionMask) {
+ typedef BOOL (WINAPI *VerSetConditionMaskFunction)(ULONGLONG conditionMask, DWORD typeMask, BYTE conditionOperator);
+
+ VerSetConditionMaskFunction verSetConditionMask = (VerSetConditionMaskFunction)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "VerSetConditionMask");
+ if (verSetConditionMask == NULL)
+ return 0;
+
+ return verSetConditionMask(dwlConditionMask, dwTypeMask, dwConditionMask);
+}
+
+BOOL VerifyVersionInfoFunc(LPOSVERSIONINFOEXA lpVersionInformation, DWORD dwTypeMask, DWORDLONG dwlConditionMask) {
+ typedef BOOL (WINAPI *VerifyVersionInfoFunction)(LPOSVERSIONINFOEXA versionInformation, DWORD typeMask, DWORDLONG conditionMask);
+
+ VerifyVersionInfoFunction verifyVersionInfo = (VerifyVersionInfoFunction)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "VerifyVersionInfoA");
+ if (verifyVersionInfo == NULL)
+ return FALSE;
+
+ return verifyVersionInfo(lpVersionInformation, dwTypeMask, dwlConditionMask);
+}
+
bool Win32TaskbarManager::isWin7OrLater() {
OSVERSIONINFOEX versionInfo;
DWORDLONG conditionMask = 0;
@@ -241,10 +389,10 @@ bool Win32TaskbarManager::isWin7OrLater() {
versionInfo.dwMajorVersion = 6;
versionInfo.dwMinorVersion = 1;
- VER_SET_CONDITION(conditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL);
- VER_SET_CONDITION(conditionMask, VER_MINORVERSION, VER_GREATER_EQUAL);
+ conditionMask = VerSetConditionMaskFunc(conditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL);
+ conditionMask = VerSetConditionMaskFunc(conditionMask, VER_MINORVERSION, VER_GREATER_EQUAL);
- return VerifyVersionInfo(&versionInfo, VER_MAJORVERSION | VER_MINORVERSION, conditionMask);
+ return VerifyVersionInfoFunc(&versionInfo, VER_MAJORVERSION | VER_MINORVERSION, conditionMask);
}
LPWSTR Win32TaskbarManager::ansiToUnicode(const char *s) {
diff --git a/backends/taskbar/win32/win32-taskbar.h b/backends/taskbar/win32/win32-taskbar.h
index 3415a79bd7..36415c1c57 100644
--- a/backends/taskbar/win32/win32-taskbar.h
+++ b/backends/taskbar/win32/win32-taskbar.h
@@ -8,19 +8,16 @@
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
-
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
-
+ *
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
- *
*/
#ifndef BACKEND_WIN32_TASKBAR_H
@@ -41,11 +38,18 @@ public:
virtual void setOverlayIcon(const Common::String &name, const Common::String &description);
virtual void setProgressValue(int completed, int total);
virtual void setProgressState(TaskbarProgressState state);
+ virtual void setCount(int count);
virtual void addRecent(const Common::String &name, const Common::String &description);
+ virtual void notifyError();
+ virtual void clearError();
private:
ITaskbarList3 *_taskbar;
+ // Count handling
+ HICON _icon;
+ int _count;
+
/**
* Get the path to an icon for the game
*
diff --git a/backends/timer/bada/timer.cpp b/backends/timer/bada/timer.cpp
new file mode 100755
index 0000000000..8f5620401f
--- /dev/null
+++ b/backends/timer/bada/timer.cpp
@@ -0,0 +1,115 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#if defined (BADA)
+
+#include "backends/timer/bada/timer.h"
+
+//
+// TimerSlot
+//
+TimerSlot::TimerSlot(Common::TimerManager::TimerProc callback,
+ uint32 interval, void *refCon) :
+ _timer(0),
+ _callback(callback),
+ _interval(interval),
+ _refCon(refCon) {
+}
+
+TimerSlot::~TimerSlot() {
+}
+
+bool TimerSlot::OnStart() {
+ _timer = new Osp::Base::Runtime::Timer();
+ if (!_timer || IsFailed(_timer->Construct(*this))) {
+ AppLog("Failed to create timer");
+ return false;
+ }
+
+ if (IsFailed(_timer->Start(_interval))) {
+ AppLog("failed to start timer");
+ return false;
+ }
+
+ AppLog("started timer %d", _interval);
+ return true;
+}
+
+void TimerSlot::OnStop() {
+ AppLog("timer stopped");
+ if (_timer) {
+ _timer->Cancel();
+ delete _timer;
+ _timer = NULL;
+ }
+}
+
+void TimerSlot::OnTimerExpired(Timer &timer) {
+ _callback(_refCon);
+ timer.Start(_interval);
+}
+
+//
+// BadaTimerManager
+//
+BadaTimerManager::BadaTimerManager() {
+}
+
+BadaTimerManager::~BadaTimerManager() {
+ for (Common::List<TimerSlot>::iterator slot = _timers.begin();
+ slot != _timers.end(); ++slot) {
+ slot->Stop();
+ slot = _timers.erase(slot);
+ }
+}
+
+bool BadaTimerManager::installTimerProc(TimerProc proc, int32 interval, void *refCon,
+ const Common::String &id) {
+ TimerSlot *slot = new TimerSlot(proc, interval / 1000, refCon);
+
+ if (IsFailed(slot->Construct(THREAD_TYPE_EVENT_DRIVEN))) {
+ AppLog("Failed to create timer thread");
+ delete slot;
+ return false;
+ }
+
+ if (IsFailed(slot->Start())) {
+ delete slot;
+ AppLog("Failed to start timer thread");
+ return false;
+ }
+
+ _timers.push_back(*slot);
+ return true;
+}
+
+void BadaTimerManager::removeTimerProc(TimerProc proc) {
+ for (Common::List<TimerSlot>::iterator slot = _timers.begin();
+ slot != _timers.end(); ++slot) {
+ if (slot->_callback == proc) {
+ slot->Stop();
+ slot = _timers.erase(slot);
+ }
+ }
+}
+
+#endif
diff --git a/backends/timer/bada/timer.h b/backends/timer/bada/timer.h
new file mode 100755
index 0000000000..04ca771c26
--- /dev/null
+++ b/backends/timer/bada/timer.h
@@ -0,0 +1,62 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef BADA_TIMER_H
+#define BADA_TIMER_H
+
+#include <FBase.h>
+
+#include "common/timer.h"
+#include "common/list.h"
+
+using namespace Osp::Base::Runtime;
+
+struct TimerSlot: public ITimerEventListener, public Thread {
+ TimerSlot(Common::TimerManager::TimerProc callback,
+ uint32 interval,
+ void *refCon);
+ ~TimerSlot();
+
+ bool OnStart(void);
+ void OnStop(void);
+ void OnTimerExpired(Timer &timer);
+
+ Timer *_timer;
+ Common::TimerManager::TimerProc _callback;
+ uint32 _interval; // in microseconds
+ void *_refCon;
+};
+
+class BadaTimerManager : public Common::TimerManager {
+public:
+ BadaTimerManager();
+ ~BadaTimerManager();
+
+ bool installTimerProc(TimerProc proc, int32 interval, void *refCon,
+ const Common::String &id);
+ void removeTimerProc(TimerProc proc);
+
+private:
+ Common::List<TimerSlot> _timers;
+};
+
+#endif
diff --git a/backends/timer/default/default-timer.cpp b/backends/timer/default/default-timer.cpp
index 8480fcc7ee..e1aadb62b8 100644
--- a/backends/timer/default/default-timer.cpp
+++ b/backends/timer/default/default-timer.cpp
@@ -24,10 +24,10 @@
#include "common/util.h"
#include "common/system.h"
-
struct TimerSlot {
Common::TimerManager::TimerProc callback;
void *refCon;
+ Common::String id;
uint32 interval; // in microseconds
uint32 nextFireTime; // in milliseconds
@@ -109,13 +109,28 @@ void DefaultTimerManager::handler() {
}
}
-bool DefaultTimerManager::installTimerProc(TimerProc callback, int32 interval, void *refCon) {
+bool DefaultTimerManager::installTimerProc(TimerProc callback, int32 interval, void *refCon, const Common::String &id) {
assert(interval > 0);
Common::StackLock lock(_mutex);
+ if (_callbacks.contains(id)) {
+ if (_callbacks[id] != callback) {
+ error("Different callbacks are referred by same name (%s)", id.c_str());
+ }
+ }
+ TimerSlotMap::const_iterator i;
+
+ for (i = _callbacks.begin(); i != _callbacks.end(); ++i) {
+ if (i->_value == callback) {
+ error("Same callback is referred by different names (%s vs %s)", i->_key.c_str(), id.c_str());
+ }
+ }
+ _callbacks[id] = callback;
+
TimerSlot *slot = new TimerSlot;
slot->callback = callback;
slot->refCon = refCon;
+ slot->id = id;
slot->interval = interval;
slot->nextFireTime = g_system->getMillis() + interval / 1000;
slot->nextFireTimeMicro = interval % 1000;
@@ -146,4 +161,21 @@ void DefaultTimerManager::removeTimerProc(TimerProc callback) {
slot = slot->next;
}
}
+
+ // We need to remove all names referencing the timer proc here.
+ //
+ // Else we run into troubles, when the client code removes and readds timer
+ // callbacks.
+ //
+ // Another issues occurs when one plays a game with ALSA as music driver,
+ // does RTL and starts a different engine game with ALSA as music driver.
+ // In this case the MPU401 code will add different timer procs with the
+ // same name, resulting in two different callbacks added with the same
+ // name and causing installTimerProc to error out.
+ // A good test case is running a SCUMM with ALSA output and then a KYRA
+ // game for example.
+ for (TimerSlotMap::iterator i = _callbacks.begin(), end = _callbacks.end(); i != end; ++i) {
+ if (i->_value == callback)
+ _callbacks.erase(i);
+ }
}
diff --git a/backends/timer/default/default-timer.h b/backends/timer/default/default-timer.h
index 66d2e3b091..e5a9dada79 100644
--- a/backends/timer/default/default-timer.h
+++ b/backends/timer/default/default-timer.h
@@ -22,6 +22,8 @@
#ifndef BACKENDS_TIMER_DEFAULT_H
#define BACKENDS_TIMER_DEFAULT_H
+#include "common/str.h"
+#include "common/hash-str.h"
#include "common/timer.h"
#include "common/mutex.h"
@@ -29,14 +31,17 @@ struct TimerSlot;
class DefaultTimerManager : public Common::TimerManager {
private:
+ typedef Common::HashMap<Common::String, TimerProc, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> TimerSlotMap;
+
Common::Mutex _mutex;
void *_timerHandler;
TimerSlot *_head;
+ TimerSlotMap _callbacks;
public:
DefaultTimerManager();
virtual ~DefaultTimerManager();
- virtual bool installTimerProc(TimerProc proc, int32 interval, void *refCon);
+ virtual bool installTimerProc(TimerProc proc, int32 interval, void *refCon, const Common::String &id);
virtual void removeTimerProc(TimerProc proc);
/**
diff --git a/backends/updates/macosx/macosx-updates.h b/backends/updates/macosx/macosx-updates.h
new file mode 100644
index 0000000000..8c9ac1f743
--- /dev/null
+++ b/backends/updates/macosx/macosx-updates.h
@@ -0,0 +1,48 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef BACKENDS_UPDATES_MACOSX_H
+#define BACKENDS_UPDATES_MACOSX_H
+
+#include "common/scummsys.h"
+
+#if defined(MACOSX) && defined(USE_SPARKLE)
+
+#include "common/updates.h"
+
+class MacOSXUpdateManager : public Common::UpdateManager {
+public:
+ MacOSXUpdateManager();
+ virtual ~MacOSXUpdateManager();
+
+ virtual void checkForUpdates();
+
+ virtual void setAutomaticallyChecksForUpdates(UpdateState state);
+ virtual UpdateState getAutomaticallyChecksForUpdates();
+
+ virtual void setUpdateCheckInterval(UpdateInterval interval);
+ virtual UpdateInterval getUpdateCheckInterval();
+};
+
+#endif
+
+#endif // BACKENDS_UPDATES_MACOSX_H
diff --git a/backends/updates/macosx/macosx-updates.mm b/backends/updates/macosx/macosx-updates.mm
new file mode 100644
index 0000000000..741e89891c
--- /dev/null
+++ b/backends/updates/macosx/macosx-updates.mm
@@ -0,0 +1,127 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+// Disable symbol overrides so that we can use system headers.
+#define FORBIDDEN_SYMBOL_ALLOW_ALL
+
+#include "backends/updates/macosx/macosx-updates.h"
+
+#ifdef USE_SPARKLE
+#include "common/translation.h"
+
+#include <Cocoa/Cocoa.h>
+#include <Sparkle/Sparkle.h>
+
+SUUpdater *sparkleUpdater;
+
+/**
+ * Sparkle is a software update framework for Mac OS X which uses appcasts for
+ * release information. Appcasts are RSS-like XML feeds which contain information
+ * about the most current version at the time. If a new version is available, the
+ * user is presented the release-notes/changes/fixes and is asked if he wants to
+ * update, and if yes the Sparkle framework downloads a signed update package
+ * from the server and automatically installs and restarts the software.
+ * More detailed information is available at the following address:
+ * http://sparkle.andymatuschak.org/
+ *
+ */
+MacOSXUpdateManager::MacOSXUpdateManager() {
+ NSMenuItem *menuItem = [[NSApp mainMenu] itemAtIndex:0];
+ NSMenu *applicationMenu = [menuItem submenu];
+
+ // Init Sparkle
+ sparkleUpdater = [SUUpdater sharedUpdater];
+
+ NSBundle* mainBundle = [NSBundle mainBundle];
+
+ NSString* feedbackURL = [mainBundle objectForInfoDictionaryKey:@"SUFeedURL"];
+
+ // Set appcast URL
+ [sparkleUpdater setFeedURL:[NSURL URLWithString:feedbackURL]];
+
+ // Get current encoding
+ NSStringEncoding stringEncoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((CFStringRef)[NSString stringWithCString:(TransMan.getCurrentCharset()).c_str() encoding:NSASCIIStringEncoding]));
+
+ // Add "Check for Updates..." menu item
+ NSMenuItem *updateMenuItem = [applicationMenu insertItemWithTitle:[NSString stringWithCString:_("Check for Updates...") encoding:stringEncoding] action:@selector(checkForUpdates:) keyEquivalent:@"" atIndex:1];
+
+ // Set the target of the new menu item
+ [updateMenuItem setTarget:sparkleUpdater];
+
+ // Finally give up our references to the objects
+ [menuItem release];
+
+ // Enable automatic update checking once a day (alternatively use
+ // checkForUpdates() here to check for updates on every startup)
+ // TODO: Should be removed when an update settings gui is implemented
+ setAutomaticallyChecksForUpdates(kUpdateStateEnabled);
+ setUpdateCheckInterval(kUpdateIntervalOneDay);
+}
+
+MacOSXUpdateManager::~MacOSXUpdateManager() {
+ [sparkleUpdater release];
+}
+
+void MacOSXUpdateManager::checkForUpdates() {
+ [sparkleUpdater checkForUpdatesInBackground];
+}
+
+void MacOSXUpdateManager::setAutomaticallyChecksForUpdates(UpdateManager::UpdateState state) {
+ if (state == kUpdateStateNotSupported)
+ return;
+
+ [sparkleUpdater setAutomaticallyChecksForUpdates:(state == kUpdateStateEnabled ? YES : NO)];
+}
+
+Common::UpdateManager::UpdateState MacOSXUpdateManager::getAutomaticallyChecksForUpdates() {
+ if ([sparkleUpdater automaticallyChecksForUpdates])
+ return kUpdateStateEnabled;
+ else
+ return kUpdateStateDisabled;
+}
+
+void MacOSXUpdateManager::setUpdateCheckInterval(UpdateInterval interval) {
+ if (interval == kUpdateIntervalNotSupported)
+ return;
+
+ [sparkleUpdater setUpdateCheckInterval:(NSTimeInterval)interval];
+}
+
+Common::UpdateManager::UpdateInterval MacOSXUpdateManager::getUpdateCheckInterval() {
+ // This is kind of a hack but necessary, as the value stored by Sparkle
+ // might have been changed outside of ScummVM (in which case we return the
+ // default interval of one day)
+
+ UpdateInterval updateInterval = (UpdateInterval)[sparkleUpdater updateCheckInterval];
+ switch (updateInterval) {
+ case kUpdateIntervalOneDay:
+ case kUpdateIntervalOneWeek:
+ case kUpdateIntervalOneMonth:
+ return updateInterval;
+
+ default:
+ // Return the default value (one day)
+ return kUpdateIntervalOneDay;
+ }
+}
+
+#endif
diff --git a/backends/vkeybd/virtual-keyboard-parser.cpp b/backends/vkeybd/virtual-keyboard-parser.cpp
index 5e4ce11fe4..58f0c468f6 100644
--- a/backends/vkeybd/virtual-keyboard-parser.cpp
+++ b/backends/vkeybd/virtual-keyboard-parser.cpp
@@ -205,6 +205,9 @@ bool VirtualKeyboardParser::parserCallback_event(ParserNode *node) {
evt->type = VirtualKeyboard::kVKEventModifier;
byte *flags = (byte*) malloc(sizeof(byte));
+ if (!flags)
+ error("[VirtualKeyboardParser::parserCallback_event] Cannot allocate memory");
+
*(flags) = parseFlags(node->values["modifiers"]);
evt->data = flags;
@@ -217,6 +220,9 @@ bool VirtualKeyboardParser::parserCallback_event(ParserNode *node) {
evt->type = VirtualKeyboard::kVKEventSwitchMode;
String& mode = node->values["mode"];
char *str = (char*) malloc(sizeof(char) * mode.size() + 1);
+ if (!str)
+ error("[VirtualKeyboardParser::parserCallback_event] Cannot allocate memory");
+
memcpy(str, mode.c_str(), sizeof(char) * mode.size());
str[mode.size()] = 0;
evt->data = str;
diff --git a/backends/vkeybd/virtual-keyboard.cpp b/backends/vkeybd/virtual-keyboard.cpp
index afdb800562..1dada06951 100644
--- a/backends/vkeybd/virtual-keyboard.cpp
+++ b/backends/vkeybd/virtual-keyboard.cpp
@@ -417,4 +417,3 @@ bool VirtualKeyboard::KeyPressQueue::hasStringChanged() {
} // End of namespace Common
#endif // #ifdef ENABLE_VKEYBD
-