Skip to content
Snippets Groups Projects
ratio.rb 2.57 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/usr/bin/env ruby
    # ratio.rb  
    # Translated from FOX C++ version to Ruby (Dec 2004) by Brett Hallett.
    # Demonstrates the use of the FXSpring method to retain size ratios between widgets when form is resized.
    #
    
    require 'fox16'
    require 'fox16/colors'
    require 'fox16/kwargs'
    
    include Fox
    
    class MainWindow < FXMainWindow
      
      def initialize(app)
    	 # Initialize base class first
        super(app, 'Ratio', :opts => DECOR_ALL,
          :width => 400, :height => 200,
          :padLeft => 8, :padRight => 8, :padTop => 8, :padBottom =>8,
          :hSpacing => 6, :vSpacing => 6)
    
        # Add quit button and connect it to application
        FXButton.new(self, "&Quit", nil, app, FXApp::ID_QUIT,
          :opts => FRAME_RAISED|FRAME_THICK|LAYOUT_SIDE_BOTTOM|LAYOUT_CENTER_X,
          :padLeft => 20, :padRight => 20, :padTop => 2, :padBottom => 2)
    
        # Label above it
        FXLabel.new(self,
          "FXSpring can be used to keep widgets at fixed size ratios.\n\nResize the window to see how it behaves!",
          :opts => LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
    
        # Layout manager to place the springs
        horz = FXHorizontalFrame.new(self, FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y,
        :padLeft => 0, :padRight => 0, :padTop => 0, :padBottom => 0,
        :hSpacing => 0, :vSpacing => 0)
    
    	 # First spring is set to behave normally in Y direction,
    	 # but to have a ratio 1 for the X direction
    	 FXSpring.new(horz, LAYOUT_FILL_X|LAYOUT_FILL_Y, :relw => 1, :padding => 0) do |spring|
    	   FXLabel.new(spring, "1", :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y) do |label|
    	     label.backColor = FXColor::Red
          end
        end
    
        # Second spring has ratio 2 in the X direction
        FXSpring.new(horz, LAYOUT_FILL_X|LAYOUT_FILL_Y, :relw => 2, :padding => 0) do |spring|
          FXLabel.new(spring, "2", :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y) do |label|
            label.backColor = FXColor::Green
          end
        end
    
        # Third spring has ratio 3 in the X direction
        FXSpring.new(horz, LAYOUT_FILL_X|LAYOUT_FILL_Y, :relw => 3, :padding => 0) do |spring|
          puts "pl, pr, pt, pb = #{spring.padLeft}, #{spring.padRight}, #{spring.padTop}, #{spring.padBottom}"
          FXLabel.new(spring, "3", :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y) do |label|
            label.backColor = FXColor::Blue
          end
        end
      end
    
      def create
        super 
        show(PLACEMENT_SCREEN) 
      end # create 
    
    end  # class MainWindow 
    
    if __FILE__ == $0
      # Construct an application
      FXApp.new('Smithy', 'Max') do |theApp|
    
        # Construct the main window
        MainWindow.new(theApp) 
    
        # Create and show the application windows  
        theApp.create 
    
        # Run the application
        theApp.run
      end
    end