… | |
… | |
17 | die if $@; |
17 | die if $@; |
18 | } |
18 | } |
19 | |
19 | |
20 | use common::sense; |
20 | use common::sense; |
21 | use Carp 'verbose'; |
21 | use Carp 'verbose'; |
|
|
22 | use Cwd (); |
22 | use EV; |
23 | use EV; |
23 | BEGIN { *time = \&EV::time } |
24 | BEGIN { *time = \&EV::time } |
24 | |
25 | |
25 | use List::Util qw(max min); |
26 | use List::Util qw(max min); |
26 | |
27 | |
… | |
… | |
40 | # nop at compiletime |
41 | # nop at compiletime |
41 | } |
42 | } |
42 | |
43 | |
43 | BEGIN { |
44 | BEGIN { |
44 | $SIG{__DIE__} = sub { |
45 | $SIG{__DIE__} = sub { |
45 | return if $^S; |
46 | return if $^S; # quick reject |
|
|
47 | |
|
|
48 | # return if there are any eval contexts in the csall stack |
|
|
49 | for my $i (0..999) { |
|
|
50 | my ($sub, $is_require) = (caller $i)[3, 7] |
|
|
51 | or last; |
|
|
52 | return if $sub eq "(eval)" && !$is_require; |
|
|
53 | } |
|
|
54 | |
46 | crash "CRASH/DIE: $_[0]" => 1; |
55 | crash "CRASH/DIE: $_[0]" => 1; |
47 | DC::fatal Carp::longmess "$_[0]"; |
56 | DC::fatal Carp::longmess "$_[0]"; |
48 | } |
57 | } |
49 | } |
58 | } |
50 | |
59 | |
… | |
… | |
133 | our $PL_NOTEBOOK; |
142 | our $PL_NOTEBOOK; |
134 | our $PL_WINDOW; |
143 | our $PL_WINDOW; |
135 | |
144 | |
136 | our $MUSIC_PLAYING_WIDGET; |
145 | our $MUSIC_PLAYING_WIDGET; |
137 | our $LICENSE_WIDGET; |
146 | our $LICENSE_WIDGET; |
|
|
147 | our $DOWNLOADS_WIDGET; |
138 | |
148 | |
139 | our $PICKUP_PAGE; |
149 | our $PICKUP_PAGE; |
140 | our $INVENTORY_PAGE; |
150 | our $INVENTORY_PAGE; |
141 | our $STATS_PAGE; |
151 | our $STATS_PAGE; |
142 | our $SKILL_PAGE; |
152 | our $SKILL_PAGE; |
… | |
… | |
1131 | text => $CFG->{audio_driver}, |
1141 | text => $CFG->{audio_driver}, |
1132 | template => "dsound1234", |
1142 | template => "dsound1234", |
1133 | tooltip => "You can override the audio driver to use here. Leaving it empty will result " |
1143 | tooltip => "You can override the audio driver to use here. Leaving it empty will result " |
1134 | . "in Deliantra picking one automatically. GNU/Linux users often prefer specific " |
1144 | . "in Deliantra picking one automatically. GNU/Linux users often prefer specific " |
1135 | . "drivers though, and can experiment with <b>alsa</b>, <b>dsp</b>, <b>esd</b>, <b>pulse</b>, <b>arts</b>, <b>nas</b> " |
1145 | . "drivers though, and can experiment with <b>alsa</b>, <b>dsp</b>, <b>esd</b>, <b>pulse</b>, <b>arts</b>, <b>nas</b> " |
1136 | . "or other system-specific drivers. Selecting the wrong driver here will simply result" |
1146 | . "or other system-specific drivers. Selecting the wrong driver here will simply result " |
1137 | . "in no sound.", |
1147 | . "in no sound.", |
1138 | on_changed => sub { my ($self, $value) = @_; $CFG->{audio_driver} = $value; 1 } |
1148 | on_changed => sub { my ($self, $value) = @_; $CFG->{audio_driver} = $value; 1 } |
1139 | ); |
1149 | ); |
1140 | |
1150 | |
1141 | $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Sound Effects"); |
1151 | $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Sound Effects"); |
… | |
… | |
1841 | |
1851 | |
1842 | $table->add_at (0, $row , new DC::UI::Label align => 1, text => "Data Directory"); |
1852 | $table->add_at (0, $row , new DC::UI::Label align => 1, text => "Data Directory"); |
1843 | $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $Deliantra::VARDIR, tooltip => ""); |
1853 | $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $Deliantra::VARDIR, tooltip => ""); |
1844 | $table->add_at (0, $row , new DC::UI::Label align => 1, text => "Database Directory"); |
1854 | $table->add_at (0, $row , new DC::UI::Label align => 1, text => "Database Directory"); |
1845 | $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $DC::DB::DBDIR, tooltip => ""); |
1855 | $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $DC::DB::DBDIR, tooltip => ""); |
|
|
1856 | $table->add_at (0, $row , new DC::UI::Label align => 1, text => "Urlader (Prebuilt)"); |
|
|
1857 | $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $ENV{URLADER_VERSION}, tooltip => ""); |
1846 | $table->add_at (0, $row , new DC::UI::Label align => 1, text => "Branch (Prebuilt)"); |
1858 | $table->add_at (0, $row , new DC::UI::Label align => 1, text => "Branch (Prebuilt)"); |
1847 | $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $::EXE_ID, tooltip => ""); |
1859 | $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $ENV{URLADER_EXE_ID}, tooltip => ""); |
1848 | $table->add_at (0, $row , new DC::UI::Label align => 1, text => "Version (Prebuilt)"); |
1860 | $table->add_at (0, $row , new DC::UI::Label align => 1, text => "Version (Prebuilt)"); |
1849 | $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $::EXE_VER, tooltip => ""); |
1861 | $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $ENV{URLADER_EXE_VER}, tooltip => ""); |
1850 | $table->add_at (0, $row , new DC::UI::Label align => 1, text => "Update (Prebuilt)"); |
|
|
1851 | $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $::UPDPAR, tooltip => ""); |
|
|
1852 | } |
1862 | } |
1853 | |
1863 | |
1854 | $vbox |
1864 | $vbox |
1855 | } |
1865 | } |
1856 | |
1866 | |
… | |
… | |
2030 | |
2040 | |
2031 | sub media_window { |
2041 | sub media_window { |
2032 | my $vb = new DC::UI::VBox; |
2042 | my $vb = new DC::UI::VBox; |
2033 | |
2043 | |
2034 | $vb->add (new DC::UI::FancyFrame |
2044 | $vb->add (new DC::UI::FancyFrame |
2035 | label => "Currently playing music", |
2045 | label => "Current background music", |
2036 | child => new DC::UI::ScrolledWindow scroll_x => 1, scroll_y => 0, |
2046 | child => new DC::UI::ScrolledWindow scroll_x => 1, scroll_y => 0, |
2037 | child => ($MUSIC_PLAYING_WIDGET = new DC::UI::Label ellipsise => 0, fontsize => 0.8), |
2047 | child => ($MUSIC_PLAYING_WIDGET = new DC::UI::Label ellipsise => 0, fontsize => 0.8), |
2038 | ); |
2048 | ); |
|
|
2049 | |
|
|
2050 | $vb->add (new DC::UI::FancyFrame |
|
|
2051 | label => "Current downloads", |
|
|
2052 | child => ($DOWNLOADS_WIDGET = new DC::UI::Table |
|
|
2053 | expand => 1, fontsize => 0.8, padding_x => 4, padding_y => 4), |
|
|
2054 | ); |
|
|
2055 | |
|
|
2056 | $DOWNLOADS_WIDGET->connect (visibility_change => sub { |
|
|
2057 | my ($self) = @_; |
|
|
2058 | |
|
|
2059 | delete $self->{updater}; |
|
|
2060 | return unless $_[1]; |
|
|
2061 | |
|
|
2062 | $self->{updater} = AE::timer 0, 1, sub { |
|
|
2063 | $self->clear; |
|
|
2064 | |
|
|
2065 | return unless $CONN; |
|
|
2066 | |
|
|
2067 | my @nums = sort { $b <=> $a } keys %{ $CONN->{ix_recv_buf} }; |
|
|
2068 | |
|
|
2069 | $self->add_at (0, 0, new DC::UI::Label align => 1, text => "Face"); |
|
|
2070 | $self->add_at (1, 0, new DC::UI::Label align => 0, text => "Octets/Total"); |
|
|
2071 | |
|
|
2072 | for my $row (0 .. $#nums) { |
|
|
2073 | my $num = $nums[$row]; |
|
|
2074 | |
|
|
2075 | my $total = length $CONN->{ix_recv_buf}{$num}; |
|
|
2076 | my $got = $total - $CONN->{ix_recv_ofs}{$num}; |
|
|
2077 | |
|
|
2078 | $self->add_at (0, $row + 1, new DC::UI::Label align => 1, text => $num, tooltip => ""); |
|
|
2079 | $self->add_at (1, $row + 1, new DC::UI::Label align => 0, text => "$got/$total", tooltip => ""); |
|
|
2080 | } |
|
|
2081 | }; |
|
|
2082 | }); |
2039 | |
2083 | |
2040 | $vb->add (new DC::UI::FancyFrame |
2084 | $vb->add (new DC::UI::FancyFrame |
2041 | label => "Other media used in this session", |
2085 | label => "Other media used in this session", |
2042 | expand => 1, |
2086 | expand => 1, |
2043 | child => ($LICENSE_WIDGET = new DC::UI::TextScroller |
2087 | child => ($LICENSE_WIDGET = new DC::UI::TextScroller |
2044 | expand => 1, fontsize => 0.8, padding_x => 4, padding_y => 4), |
2088 | expand => 1, fontsize => 0.8, padding_x => 4, padding_y => 4), |
2045 | ); |
2089 | ); |
2046 | |
2090 | |
2047 | $vb |
2091 | $vb |
2048 | } |
2092 | } |
2049 | |
2093 | |
… | |
… | |
2838 | }; |
2882 | }; |
2839 | } |
2883 | } |
2840 | } |
2884 | } |
2841 | } |
2885 | } |
2842 | |
2886 | |
|
|
2887 | # fontconfig doesn't support relative paths anymore, so use abs_path and keep fingers crossed |
|
|
2888 | # these are ignored under windows, for some reason, and thus set in the loader |
2843 | $ENV{FONTCONFIG_FILE} = DC::find_rcfile "fonts/fonts.conf"; |
2889 | $ENV{FONTCONFIG_FILE} = "fonts.conf"; |
2844 | $ENV{FONTCONFIG_DIR} = DC::find_rcfile "fonts"; |
2890 | $ENV{FONTCONFIG_PATH} = Cwd::abs_path DC::find_rcfile "fonts"; |
|
|
2891 | $ENV{FONTCONFIG_DIR} = $ENV{FONTCONFIG_PATH}; # helps with older versions |
2845 | |
2892 | |
2846 | { |
2893 | { |
2847 | my @fonts = map DC::find_rcfile "fonts/$_", qw( |
2894 | my @fonts = map DC::find_rcfile "fonts/$_", qw( |
2848 | DejaVuSans.ttf |
2895 | DejaVuSans.ttf |
2849 | DejaVuSansMono.ttf |
2896 | DejaVuSansMono.ttf |