Skip to content

Commit

Permalink
merged r1083 (added GTK for Windows)
Browse files Browse the repository at this point in the history
git-svn-id: https://pycam.svn.sourceforge.net/svnroot/pycam/trunk@1089 bbaffbd6-741e-11dd-a85d-61de82d9cad9
  • Loading branch information
sumpfralle committed Jun 12, 2011
1 parent b5f269f commit 249f874
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 3 deletions.
1 change: 1 addition & 0 deletions Changelog
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ Version 0.5.1 - UNRELEASED
* 2D projection of multi-layered 2D models
* significantly improved performance of 3D visualization
* fixed "help" links for Windows users
* added GTK theme with a native look&feel for Windows
* improved detection of library locations for Windows package
* minor bugs fixed

Expand Down
34 changes: 31 additions & 3 deletions pyinstaller/pycam.spec
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ else:
data = [(os.path.join(UI_DATA_RELATIVE, "pycam-project.ui"), os.path.join(UI_DATA_DIR, "pycam-project.ui"), "DATA"),
(os.path.join(UI_DATA_RELATIVE, "menubar.xml"), os.path.join(UI_DATA_DIR, "menubar.xml"), "DATA"),
(os.path.join(UI_DATA_RELATIVE, "logo_gui.png"), os.path.join(UI_DATA_DIR, "logo_gui.png"), "DATA"),
(os.path.join(UI_DATA_RELATIVE, "gtkrc_windows"), os.path.join(UI_DATA_DIR, "gtkrc_windows"), "DATA"),
]

# sample models
Expand All @@ -41,13 +42,13 @@ if get_platform() == PLATFORM_WINDOWS:
start_dirs = (os.path.join(os.environ["PROGRAMFILES"], "Common files", "Gtk"),
os.path.join(os.environ["COMMONPROGRAMFILES"], "Gtk"),
r"C:\\")
def find_gtk_pixbuf_dir(dirs):
def find_filename_below_dirs(dirs, filename):
for start_dir in dirs:
for root, dirs, files in os.walk(start_dir):
if "libpixbufloader-png.dll" in files:
if filename in files:
return root
return None
gtk_loaders_dir = find_gtk_pixbuf_dir(start_dirs)
gtk_loaders_dir = find_filename_below_dirs(start_dirs, "libpixbufloader-png.dll")
if gtk_loaders_dir is None:
print >>sys.stderr, "Failed to locate Gtk installation (looking for libpixbufloader-png.dll)"
#sys.exit(1)
Expand All @@ -69,6 +70,33 @@ if get_platform() == PLATFORM_WINDOWS:
gtk_pixbuf_config_file = os.path.join(config_dir, config_relative)
data.append((config_relative, os.path.join(config_dir, config_relative), "DATA"))


# look for the GTK theme "MS-Windows"
# the required gtkrc file is loaded during startup
import _winreg
try:
k = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, 'Software\\GTK2-Runtime')
except EnvironmentError:
print "Failed to detect the GTK2 runtime environment - the Windows theme will be missing"
gtkdir = None
else:
gtkdir = str(_winreg.QueryValueEx(k, 'InstallationDirectory')[0])

if gtkdir:
# we only need this dll file
wimp_engine_file = "libwimp.dll"
engine_dir = find_filename_below_dirs([gtkdir], wimp_engine_file)
if engine_dir:
if engine_dir.startswith(gtkdir):
relative_engine_dir = engine_dir[len(gtkdir):]
else:
relative_engine_dir = engine_dir
engine_dll = os.path.join(engine_dir, wimp_engine_file)
relative_engine_dll = os.path.join(relative_engine_dir,
wimp_engine_file)
data.append((relative_engine_dll, engine_dll, "BINARY"))


# somehow we need to add glut32.dll manually
def find_glut32(start_dir, filename="glut32.dll"):
for root, dirs, files in os.walk(start_dir):
Expand Down
68 changes: 68 additions & 0 deletions share/ui/gtkrc_windows
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
gtk-theme-name = "MS-Windows"

gtk-icon-sizes = "gtk-menu=13,13:gtk-small-toolbar=16,16:gtk-large-toolbar=24,24:gtk-dnd=32,32"
gtk-toolbar-icon-size = small-toolbar

# disable images in buttons. i've only seen ugly delphi apps use this feature.
gtk-button-images = 0

# enable/disable images in menus. most "stock" microsoft apps don't use these, except sparingly.
# the office apps use them heavily, though.
gtk-menu-images = 1

# use the win32 button ordering instead of the GNOME HIG one, where applicable
gtk-alternative-button-order = 1

# use the win32 sort indicators direction, as in Explorer
gtk-alternative-sort-arrows = 1

# Windows users don't expect the PC Speaker beeping at them when they backspace in an empty textview and stuff like that
gtk-error-bell = 0

style "msw-default"
{
GtkWidget::interior-focus = 1
GtkOptionMenu::indicator-size = { 9, 5 }
GtkOptionMenu::indicator-spacing = { 7, 5, 2, 2 }
GtkSpinButton::shadow-type = in

# Owen and I disagree that these should be themable
#GtkUIManager::add-tearoffs = 0
#GtkComboBox::add-tearoffs = 0

GtkComboBox::appears-as-list = 1
GtkComboBox::focus-on-click = 0

GOComboBox::add_tearoffs = 0

GtkTreeView::allow-rules = 0
GtkTreeView::expander-size = 12

GtkExpander::expander-size = 12

GtkScrolledWindow::scrollbar_spacing = 1

GtkSeparatorMenuItem::horizontal-padding = 2

engine "wimp"
{
}
}
class "*" style "msw-default"

binding "ms-windows-tree-view"
{
bind "Right" { "expand-collapse-cursor-row" (1,1,0) }
bind "Left" { "expand-collapse-cursor-row" (1,0,0) }
}

class "GtkTreeView" binding "ms-windows-tree-view"

style "msw-combobox-thickness" = "msw-default"
{
xthickness = 0
ythickness = 0
}

widget_class "*TreeView*ComboBox*" style "msw-combobox-thickness"
widget_class "*ComboBox*GtkFrame*" style "msw-combobox-thickness"
7 changes: 7 additions & 0 deletions src/pycam/Gui/Project.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@

GTKBUILD_FILE = "pycam-project.ui"
GTKMENU_FILE = "menubar.xml"
GTKRC_FILE_WINDOWS = os.path.join(UI_SUBDIR, "gtkrc_windows")

WINDOW_ICON_FILENAMES = ["logo_%dpx.png" % pixels for pixels in (16, 32, 48, 64, 128)]

Expand Down Expand Up @@ -345,6 +346,12 @@ def __init__(self, no_dialog=False):
if gtk_build_file is None:
gtk.main_quit()
self.gui.add_from_file(gtk_build_file)
if pycam.Utils.get_platform() == pycam.Utils.PLATFORM_WINDOWS:
gtkrc_file = get_data_file_location(GTKRC_FILE_WINDOWS)
if gtkrc_file:
print "GTKRC: %s" % str(gtkrc_file)
gtk.rc_add_default_file(gtkrc_file)
gtk.rc_reparse_all_for_settings(gtk.settings_get_default(), True)
self.window = self.gui.get_object("ProjectWindow")
# show stock items on buttons
# increase the initial width of the window (due to hidden elements)
Expand Down

0 comments on commit 249f874

Please sign in to comment.