In Files

Parent

Included Modules

Class Index [+]

Quicksearch

Magick::Image::View::Rows

Magick::Image::View::Rows

Public Class Methods

new(view, width, height, rows) click to toggle source
      # File lib/RMagick.rb, line 1124
1124:             def initialize(view, width, height, rows)
1125:                 @view = view
1126:                 @width = width
1127:                 @height = height
1128:                 @rows = rows
1129:             end

Public Instance Methods

[](*args) click to toggle source
      # File lib/RMagick.rb, line 1131
1131:             def [](*args)
1132:                 cols(args)
1133: 
1134:                 # Both View::Pixels and Magick::Pixel implement Observable
1135:                 if @unique
1136:                     pixels = @view[@rows[0]*@width + @cols[0]]
1137:                     pixels.add_observer(self)
1138:                 else
1139:                     pixels = View::Pixels.new
1140:                     each do |x|
1141:                         p = @view[x]
1142:                         p.add_observer(self)
1143:                         pixels << p
1144:                     end
1145:                 end
1146:                 pixels
1147:             end
[]=(*args) click to toggle source
      # File lib/RMagick.rb, line 1149
1149:             def []=(*args)
1150:                 rv = args.delete_at(1)     # get rvalue
1151:                 if ! rv.is_a?(Pixel)        # must be a Pixel or a color name
1152:                     begin
1153:                         rv = Pixel.from_color(rv)
1154:                     rescue TypeError
1155:                         Kernel.raise TypeError, "cannot convert #{rv.class} into Pixel"
1156:                     end
1157:                 end
1158:                 cols(args)
1159:                 each { |x| @view[x] = rv.dup }
1160:                 changed
1161:                 notify_observers(self)
1162:                 nil
1163:             end
update(pixel) click to toggle source

A pixel has been modified. Tell the view.

      # File lib/RMagick.rb, line 1166
1166:             def update(pixel)
1167:                 changed
1168:                 notify_observers(self)
1169:                 pixel.delete_observer(self) # Don't need to hear again.
1170:                 nil
1171:             end

Private Instance Methods

cols(*args) click to toggle source
      # File lib/RMagick.rb, line 1175
1175:             def cols(*args)
1176:                 @cols = args[0]     # remove the outermost array
1177:                 @unique = false
1178: 
1179:                 # Convert @rows to an Enumerable object
1180:                 case @rows.length
1181:                     when 0                      # Create a Range for all the rows
1182:                         @rows = Range.new(0, @height, true)
1183:                     when 1                      # Range, Array, or a single integer
1184:                         # if the single element is already an Enumerable
1185:                         # object, get it.
1186:                         if @rows.first.respond_to? :each
1187:                             @rows = @rows.first
1188:                         else
1189:                             @rows = Integer(@rows.first)
1190:                             if @rows < 0
1191:                                 @rows += @height
1192:                             end
1193:                             if @rows < 0 || @rows > @height-1
1194:                                 Kernel.raise IndexError, "index [#{@rows}] out of range"
1195:                             end
1196:                             # Convert back to an array
1197:                             @rows = Array.new(1, @rows)
1198:                             @unique = true
1199:                         end
1200:                     when 2
1201:                         # A pair of integers representing the starting column and the number of columns
1202:                         start = Integer(@rows[0])
1203:                         length = Integer(@rows[1])
1204: 
1205:                         # Negative start -> start from last row
1206:                         if start < 0
1207:                             start += @height
1208:                         end
1209: 
1210:                         if start > @height || start < 0 || length < 0
1211:                                 Kernel.raise IndexError, "index [#{@rows.first}] out of range"
1212:                         else
1213:                             if start + length > @height
1214:                                 length = @height - length
1215:                                 length = [length, 0].max
1216:                             end
1217:                         end
1218:                         # Create a Range for the specified set of rows
1219:                         @rows = Range.new(start, start+length, true)
1220:                 end
1221: 
1222:                 case @cols.length
1223:                     when 0                  # all rows
1224:                         @cols = Range.new(0, @width, true)  # convert to range
1225:                         @unique = false
1226:                     when 1                  # Range, Array, or a single integer
1227:                         # if the single element is already an Enumerable
1228:                         # object, get it.
1229:                         if @cols.first.respond_to? :each
1230:                             @cols = @cols.first
1231:                             @unique = false
1232:                         else
1233:                             @cols = Integer(@cols.first)
1234:                             if @cols < 0
1235:                                 @cols += @width
1236:                             end
1237:                             if @cols < 0 || @cols > @width-1
1238:                                 Kernel.raise IndexError, "index [#{@cols}] out of range"
1239:                             end
1240:                             # Convert back to array
1241:                             @cols = Array.new(1, @cols)
1242:                             @unique &&= true
1243:                         end
1244:                     when 2
1245:                         # A pair of integers representing the starting column and the number of columns
1246:                         start = Integer(@cols[0])
1247:                         length = Integer(@cols[1])
1248: 
1249:                         # Negative start -> start from last row
1250:                         if start < 0
1251:                             start += @width
1252:                         end
1253: 
1254:                         if start > @width || start < 0 || length < 0
1255:                             ; #nop
1256:                         else
1257:                             if start + length > @width
1258:                                 length = @width - length
1259:                                 length = [length, 0].max
1260:                             end
1261:                         end
1262:                         # Create a Range for the specified set of columns
1263:                         @cols = Range.new(start, start+length, true)
1264:                         @unique = false
1265:                 end
1266: 
1267:             end
each() click to toggle source

iterator called from subscript methods

      # File lib/RMagick.rb, line 1270
1270:             def each
1271:                 maxrows = @height - 1
1272:                 maxcols = @width - 1
1273: 
1274:                 @rows.each do |j|
1275:                     if j > maxrows
1276:                         Kernel.raise IndexError, "index [#{j}] out of range"
1277:                     end
1278:                     @cols.each do |i|
1279:                         if i > maxcols
1280:                             Kernel.raise IndexError, "index [#{i}] out of range"
1281:                         end
1282:                         yield j*@width + i
1283:                     end
1284:                 end
1285:                 nil    # useless return value
1286:             end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.