Changeset 105
- Timestamp:
- 05/01/07 21:47:51 (2 years ago)
- Files:
-
- trunk/src/main-crb.c (modified) (18 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/main-crb.c
r51 r105 160 160 161 161 162 162 163 /* 163 164 * #define ANGBAND_CREATOR four letter code for your variant, if any. … … 257 258 s16b cols; // columns in picture. 258 259 260 char font_name[200]; // Name of font for storage. 259 261 ATSUFontID font_id; 260 262 float font_size; // Scaled ATSU font size. … … 684 686 685 687 /* ICK */ 686 688 687 689 info->font_size = size; 688 690 info->font_id = fid; … … 805 807 td->font_wid = (info->font_wid +.999); 806 808 td->font_hgt = info->ascent + info->descent; 809 strncpy(td->font_name, info->psname, sizeof(td->font_name)); 807 810 808 811 /* Set default tile size */ … … 2069 2072 * pointed by key 2070 2073 */ 2071 static void save_pref _short(const char *key, shortvalue)2074 static void save_preference(const char *key, type_union value) 2072 2075 { 2073 2076 CFStringRef cf_key; 2074 CF NumberRef cf_value;2077 CFPropertyListRef cf_value; 2075 2078 2076 2079 /* allocate and initialise the key */ … … 2078 2081 2079 2082 /* allocate and initialise the value */ 2080 cf_value = CFNumberCreate(NULL, kCFNumberShortType, &value); 2083 if(value.t == T_INT) 2084 cf_value = CFNumberCreate(NULL, kCFNumberIntType, &value.u.i); 2085 2086 else if(value.t == T_STRING) 2087 cf_value = CFStringCreateWithCString(NULL, value.u.s, kTextEncodingUS_ASCII); 2088 2089 else quit(format("Unrecognized save type %d\n", value.t)); 2090 2081 2091 2082 2092 if ((cf_key != NULL) && (cf_value != NULL)) … … 2102 2112 * vptr updated appropriately, FALSE otherwise. 2103 2113 */ 2104 static bool query_load_pref_short(const char *key, short *vptr)2114 static bool load_preference(const char *key, type_union *vptr, size_t maxlen ) 2105 2115 { 2106 2116 CFStringRef cf_key; 2107 CF NumberRef cf_value;2117 CFPropertyListRef cf_value; 2108 2118 2109 2119 /* allocate and initialise the key */ … … 2125 2135 } 2126 2136 2127 /* Convert the value to short */ 2128 CFNumberGetValue( 2129 cf_value, 2130 kCFNumberShortType, 2131 vptr); 2137 /* Convert the value to appropriate type */ 2138 if(vptr->t == T_INT) 2139 CFNumberGetValue( cf_value, kCFNumberIntType, &vptr->u.i); 2140 else if(vptr->t == T_STRING) { 2141 CFRange range = { 0, 200}; 2142 (void) CFStringGetBytes (cf_value, range, kCGEncodingMacRoman, 0, 0, (UInt8*)vptr->u.s, maxlen, 0); 2143 } 2132 2144 2133 2145 /* Free CF data */ … … 2139 2151 } 2140 2152 2141 2142 /* 2143 * Update short data pointed by vptr only if preferences 2144 * value for key is located. 2145 */ 2146 static void load_pref_short(const char *key, short *vptr) 2147 { 2148 short tmp; 2149 2150 if (query_load_pref_short(key, &tmp)) *vptr = tmp; 2151 } 2152 2153 /* Convenience wrappers for commonly used type short */ 2154 static void save_pref_short(const char *key, short value) 2155 { 2156 type_union u = i2u(value); 2157 save_preference(key, u); 2158 } 2159 static bool load_pref_short(const char *key, short *vptr) 2160 { 2161 bool ret; 2162 type_union u = { T_INT }; 2163 ret = load_preference(key, &u, 0); 2164 if( ret == TRUE ) *vptr = u.u.i; 2165 return ret; 2166 } 2153 2167 2154 2168 /* … … 2165 2179 2166 2180 /* Gfx settings */ 2181 /* sound */ 2167 2182 save_pref_short("arg.arg_sound", arg_sound); 2168 /* Tile dimensions of the current graphics mode */ 2183 2184 /* double-width tiles */ 2185 save_pref_short("arg.use_bigtile", use_bigtile); 2186 2187 /* graphics mode */ 2188 save_pref_short("graf_mode", graf_mode); 2189 2169 2190 2170 2191 /* Windows */ … … 2182 2203 save_pref_short(format("term%d.left", i), td->r.left); 2183 2204 save_pref_short(format("term%d.top", i), td->r.top); 2205 2206 /* Integer font sizes only */ 2207 save_preference(format("term%d.font_size", i), i2u((int)td->font_size)); 2208 save_preference(format("term%d.font_name", i), s2u(td->font_name)); 2184 2209 } 2185 2210 … … 2204 2229 2205 2230 /* Load version information */ 2206 ok &= query_load_pref_short("version.major", &pref_major);2207 ok &= query_load_pref_short("version.minor", &pref_minor);2208 ok &= query_load_pref_short("version.patch", &pref_patch);2209 ok &= query_load_pref_short("version.extra", &pref_extra);2231 ok &= load_pref_short("version.major", &pref_major); 2232 ok &= load_pref_short("version.minor", &pref_minor); 2233 ok &= load_pref_short("version.patch", &pref_patch); 2234 ok &= load_pref_short("version.extra", &pref_extra); 2210 2235 2211 2236 /* Any of the above failed */ … … 2256 2281 2257 2282 /* sound */ 2258 if ( query_load_pref_short("arg.arg_sound", &pref_tmp))2283 if (load_pref_short("arg.arg_sound", &pref_tmp)) 2259 2284 arg_sound = pref_tmp; 2260 2285 2261 2286 /* double-width tiles */ 2262 if (query_load_pref_short("arg.big_tile", &pref_tmp)) 2263 { 2287 if (load_pref_short("arg.use_bigtile", &pref_tmp)) 2264 2288 use_bigtile = pref_tmp; 2265 } 2289 2290 if(load_pref_short("graf_mode", &pref_tmp)) 2291 graf_mode = pref_tmp; 2266 2292 2267 2293 … … 2280 2306 load_pref_short(format("term%d.left", i), &td->r.left); 2281 2307 load_pref_short(format("term%d.top", i), &td->r.top); 2308 2309 type_union u = {T_INT}; 2310 if(load_preference(format("term%d.font_size", i), &u, sizeof(int))) 2311 td->font_size = (float) u.u.i; 2312 u = s2u(td->font_name); 2313 if(load_preference(format("term%d.font_name", i), &u, sizeof(td->font_name))) { 2314 ATSUFontID fid = 0; 2315 ATSUFindFontFromName(td->font_name, strlen(td->font_name), 2316 kFontPostscriptName, kFontMacintoshPlatform, 2317 kFontNoScriptCode, kFontNoLanguageCode, &fid); 2318 if(fid) td->font_id = fid; 2319 /* Use the default */ 2320 else strncpy(td->font_name, "Monaco", sizeof(td->font_name)); 2321 } 2282 2322 } 2283 2323 } … … 2291 2331 /* Default to Monaco font */ 2292 2332 ATSUFontID fid = 0; 2333 2293 2334 ATSUFindFontFromName("Monaco", strlen("Monaco"), kFontPostscriptName, 2294 2335 kFontMacintoshPlatform, kFontNoScriptCode, 2295 2336 kFontNoLanguageCode, &fid); 2296 2337 2338 2297 2339 if(!fid) 2298 2340 quit("Failed to find font 'Monaco'"); … … 2306 2348 /* Default font */ 2307 2349 td->font_id = fid; 2350 strncpy(td->font_name, "Monaco", sizeof(td->font_name)); 2308 2351 2309 2352 /* Default font size - was 12 */ … … 2767 2810 case 'font': 2768 2811 { 2812 if(!FPIsFontPanelVisible()) { 2813 WindowRef w = FrontWindow(); 2814 if (w) { 2815 term_data *td = (term_data*) GetWRefCon(w); 2816 SetFontInfoForSelection(kFontSelectionATSUIType, 1, 2817 &td->ginfo->style, NULL); 2818 } 2819 } 2769 2820 CFStringRef tags[] = {CFSTR("Show Fonts"), CFSTR("Hide Fonts")}; 2770 2821 FPShowHideFontPanel(); … … 3838 3889 validate_menus(); 3839 3890 3891 if(graf_mode) graphics_aux(graf_mode); 3892 3840 3893 /* Start playing! */ 3841 3894 EventRef newGameEvent = nil;
