mirror of https://github.com/fltk/fltk
macOS: add "Toggle printing of titlebar" to application menu.
This commit is contained in:
parent
ec98dc113f
commit
935074ba0b
12
FL/mac.H
12
FL/mac.H
|
@ -140,10 +140,14 @@ public:
|
|||
/** Localizable text for the "About xxx" application menu item */
|
||||
static const char *about;
|
||||
/** Localizable text for the "Print Front Window" application menu item.
|
||||
This menu item won't be displayed if Fl_Mac_App_Menu::print
|
||||
This menu item and next one won't be displayed if Fl_Mac_App_Menu::print
|
||||
is set to an empty string.
|
||||
*/
|
||||
static const char *print;
|
||||
static const char *print_with_titlebar;
|
||||
/** Localizable text for the "Print Front Window" application menu item. */
|
||||
static const char *print_no_titlebar;
|
||||
/** Localizable text for the "Toggle print titlebar" application menu item. */
|
||||
static const char *toggle_print_titlebar;
|
||||
/** Localizable text for the "Services" application menu item */
|
||||
static const char *services;
|
||||
/** Localizable text for the "Hide xxx" application menu item */
|
||||
|
@ -155,8 +159,8 @@ public:
|
|||
/** Localizable text for the "Quit xxx" application menu item */
|
||||
static const char *quit;
|
||||
/** Adds custom menu item(s) to the application menu of the system menu bar.
|
||||
They are positioned after the "Print Front Window" item, or at its place
|
||||
if it was removed with <tt>Fl_Mac_App_Menu::print = ""</tt>.
|
||||
They are positioned after the "Print Front Window / Toggle printing of titlebar" items, or at their place
|
||||
if they were removed with <tt>Fl_Mac_App_Menu::print = ""</tt>.
|
||||
\param m zero-ending array of Fl_Menu_Item 's.
|
||||
*/
|
||||
static void custom_application_menu_items(const Fl_Menu_Item *m);
|
||||
|
|
|
@ -74,7 +74,9 @@ Fl_MacOS_Sys_Menu_Bar_Driver* Fl_MacOS_Sys_Menu_Bar_Driver::driver() {
|
|||
|
||||
// Apple App Menu
|
||||
const char *Fl_Mac_App_Menu::about = "About %@";
|
||||
const char *Fl_Mac_App_Menu::print = "Print Front Window";
|
||||
const char *Fl_Mac_App_Menu::print_with_titlebar = "Print Front Window & Titlebar";
|
||||
const char *Fl_Mac_App_Menu::print_no_titlebar = "Print Front Window";
|
||||
const char *Fl_Mac_App_Menu::toggle_print_titlebar = "Toggle printing of titlebar";
|
||||
const char *Fl_Mac_App_Menu::services = "Services";
|
||||
const char *Fl_Mac_App_Menu::hide = "Hide %@";
|
||||
const char *Fl_Mac_App_Menu::hide_others = "Hide Others";
|
||||
|
@ -504,8 +506,8 @@ void Fl_Mac_App_Menu::custom_application_menu_items(const Fl_Menu_Item *m)
|
|||
NSInteger to_index;
|
||||
if ([[menu itemAtIndex:2] action] != @selector(printPanel)) { // the 'Print' item was removed
|
||||
[menu insertItem:[NSMenuItem separatorItem] atIndex:1];
|
||||
to_index = 2;
|
||||
} else to_index = 3; // after the "Print Front Window" item
|
||||
to_index = 3;
|
||||
} else to_index = 4; // after the "Print Front Window/Toggle" items
|
||||
NSInteger count = [menu numberOfItems];
|
||||
createSubMenu(menu, m, NULL, @selector(customCallback)); // add new items at end of application menu
|
||||
NSInteger count2 = [menu numberOfItems];
|
||||
|
|
|
@ -3902,6 +3902,28 @@ int Fl_Cocoa_Window_Driver::set_cursor(const Fl_RGB_Image *image, int hotx, int
|
|||
return 1;
|
||||
}
|
||||
|
||||
@interface PrintWithTitlebarItem : NSMenuItem {
|
||||
}
|
||||
- (void) toggleCallback;
|
||||
@end
|
||||
|
||||
@implementation PrintWithTitlebarItem
|
||||
- (void) toggleCallback {
|
||||
NSMenuItem *item = [self representedObject];
|
||||
const char *title;
|
||||
if ([self state] == NSOnState) {
|
||||
[self setState:NSOffState];
|
||||
title = Fl_Mac_App_Menu::print_no_titlebar;
|
||||
} else {
|
||||
[self setState:NSOnState];
|
||||
title = Fl_Mac_App_Menu::print_with_titlebar;
|
||||
}
|
||||
[item setTitle:NSLocalizedString([NSString stringWithUTF8String:title], nil)];
|
||||
}
|
||||
@end
|
||||
|
||||
static PrintWithTitlebarItem *print_with_titlebar_item = NULL;
|
||||
|
||||
@interface FLaboutItemTarget : NSObject
|
||||
{
|
||||
}
|
||||
|
@ -3942,8 +3964,13 @@ int Fl_Cocoa_Window_Driver::set_cursor(const Fl_RGB_Image *image, int hotx, int
|
|||
// scale the printer device so that the window fits on the page
|
||||
float scale = 1;
|
||||
printer.printable_rect(&w, &h);
|
||||
if ([print_with_titlebar_item state] == NSOnState) {
|
||||
ww = win->decorated_w();
|
||||
wh = win->decorated_h();
|
||||
} else {
|
||||
ww = win->w();
|
||||
wh = win->h();
|
||||
}
|
||||
if (ww>w || wh>h) {
|
||||
scale = (float)w/win->w();
|
||||
if ((float)h/wh < scale) scale = (float)h/wh;
|
||||
|
@ -3959,7 +3986,10 @@ int Fl_Cocoa_Window_Driver::set_cursor(const Fl_RGB_Image *image, int hotx, int
|
|||
#else
|
||||
printer.origin(w/2, h/2);
|
||||
#endif
|
||||
printer.print_window(win, -ww/2, -wh/2);
|
||||
if ([print_with_titlebar_item state] == NSOnState)
|
||||
printer.draw_decorated_window(win, -ww/2, -wh/2);
|
||||
else
|
||||
printer.draw(win, -ww/2, -wh/2);
|
||||
//printer.print_window_part(win,0,0,win->w(),win->h(), -ww/2, -wh/2);
|
||||
printer.end_page();
|
||||
printer.end_job();
|
||||
|
@ -3992,7 +4022,7 @@ static void createAppleMenu(void)
|
|||
[menuItem setTarget:about];
|
||||
[appleMenu addItem:[NSMenuItem separatorItem]];
|
||||
// Print front window
|
||||
title = NSLocalizedString([NSString stringWithUTF8String:Fl_Mac_App_Menu::print], nil);
|
||||
title = NSLocalizedString([NSString stringWithUTF8String:Fl_Mac_App_Menu::print_with_titlebar], nil);
|
||||
if ([title length] > 0) {
|
||||
menuItem = [appleMenu
|
||||
addItemWithTitle:title
|
||||
|
@ -4000,6 +4030,16 @@ static void createAppleMenu(void)
|
|||
keyEquivalent:@""];
|
||||
[menuItem setTarget:about];
|
||||
[menuItem setEnabled:YES];
|
||||
// Toggle "Print Window with titlebar" / "Print Window"
|
||||
title = NSLocalizedString([NSString stringWithUTF8String:Fl_Mac_App_Menu::toggle_print_titlebar], nil);
|
||||
print_with_titlebar_item = [[PrintWithTitlebarItem alloc] initWithTitle:title
|
||||
action:@selector(toggleCallback)
|
||||
keyEquivalent:@""];
|
||||
[appleMenu addItem:print_with_titlebar_item];
|
||||
[print_with_titlebar_item setTarget:print_with_titlebar_item];
|
||||
[print_with_titlebar_item setRepresentedObject:menuItem];
|
||||
[print_with_titlebar_item setState:NSOnState];
|
||||
[print_with_titlebar_item setEnabled:YES];
|
||||
[appleMenu addItem:[NSMenuItem separatorItem]];
|
||||
}
|
||||
if (fl_mac_os_version >= 100400) { // services+hide+quit already in menu in OS 10.3
|
||||
|
|
Loading…
Reference in New Issue