-
Notifications
You must be signed in to change notification settings - Fork 28
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Move constants into a shoes.rb to start off shoes.rb as separate
- Loading branch information
Showing
5 changed files
with
95 additions
and
38 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
# frozen_string_literal: true | ||
|
||
# We're separating Shoes from Scarpe, a little at a time. This should eventually be requirable | ||
# without using Scarpe at all. | ||
# | ||
# This Shoes gem will, if all goes well, be a lot like the old Shoes-core from Shoes4: a way | ||
# to handle the DSL and command-line parts of Shoes without knowing anything about how the | ||
# display side works at all. | ||
|
||
# This will never be triggered -- we use the (...) feature below, which means this | ||
# file won't even parse in old Rubies. | ||
if RUBY_VERSION[0..2] < "3.2" | ||
Scarpe::Logger.logger("Scarpe").error("Scarpe requires Ruby 3.2 or higher!") | ||
exit(-1) | ||
end | ||
|
||
require_relative "shoes/constants" | ||
module Kernel | ||
include Shoes::Constants | ||
end | ||
|
||
class Shoes::Error < StandardError; end | ||
|
||
# The module containing Shoes in all its glory. | ||
# Shoes is a platform-independent GUI library, designed to create | ||
# small visual applications in Ruby. | ||
# | ||
module Shoes | ||
class << self | ||
# Creates a Shoes app with a new window. The block parameter is used to create | ||
# widgets and set up handlers. Arguments are passed to Shoes::App.new internally. | ||
# | ||
# @incompatibility In Shoes3, this method will return normally. | ||
# In Scarpe, after the block is executed, the method will not return and Scarpe | ||
# will retain control of execution until the window is closed and the app quits. | ||
# | ||
# @incompatibility In Shoes3 the parameters were a hash of options, not keyword arguments. | ||
# | ||
# @example Simple one-button app | ||
# Scarpe.app(title: "Button!", width: 200, height: 200) do | ||
# @p = para "Press it NOW!" | ||
# button("clicky") { @p.replace("You pressed it! CELEBRATION!") } | ||
# end | ||
# | ||
# @param title [String] The new app window title | ||
# @param width [Integer] The new app window width | ||
# @param height [Integer] The new app window height | ||
# @param resizable [Boolean] Whether the app window should be resizeable | ||
# @return [void] | ||
# @see Shoes::App#new | ||
def app( | ||
title: "Scarpe!", | ||
width: 480, | ||
height: 420, | ||
resizable: true, | ||
&app_code_body | ||
) | ||
app = Shoes::App.new(title:, width:, height:, resizable:, &app_code_body) | ||
app.init | ||
app.run | ||
app.destroy | ||
nil | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
# frozen_string_literal: true | ||
|
||
require "tmpdir" | ||
|
||
module Shoes | ||
module Constants | ||
def self.find_lib_dir | ||
homes = [ | ||
[ENV["LOCALAPPDATA"], "Shoes"], | ||
[ENV["APPDATA"], "Shoes"], | ||
[ENV["HOME"], ".shoes"], | ||
[Dir.tmpdir, "shoes"], | ||
] | ||
top, file = homes.detect { |home_top, _| home_top && File.exist?(home_top) } | ||
File.join(top, file) | ||
end | ||
|
||
LIB_DIR = find_lib_dir | ||
|
||
# Math constants from Shoes3 | ||
RAD2PI = 0.01745329251994329577 | ||
TWO_PI = 6.28318530717958647693 | ||
HALF_PI = 1.57079632679489661923 | ||
PI = 3.14159265358979323846 | ||
end | ||
end |