Demo version of koptreader config dialog.

pull/2/merge
chrox 12 years ago
parent 946679aa2f
commit 138def10c3

@ -252,7 +252,7 @@ end
-- load implementations:
require "document/pdfdocument"
require "document/djvudocument"
--require "document/pdfdocument"
--require "document/djvudocument"
require "document/koptdocument"
require "document/credocument"

@ -3,6 +3,175 @@ require "ui/geometry"
require "ui/screen"
require "ui/device"
KOPTOptions = {
{
name="font_size",
option_text="",
items_text={"Aa","Aa","Aa","Aa","Aa","Aa","Aa","Aa","Aa","Aa"},
text_font_size={14,16,20,23,26,30,34,38,42,46},
current_item=nil,
text_dirty=true,
marker_dirty={true, true, true, true, true, true, true, true, true, true},
values={0.2, 0.3, 0.4, 0.6, 0.8, 1.0, 1.2, 1.6, 2.2, 2.8},
default_value=DKOPTREADER_CONFIG_FONT_SIZE,
show = true,
draw_index = nil,},
{
name="text_wrap",
option_text="Reflow",
items_text={"on","off"},
current_item=nil,
text_dirty=true,
marker_dirty={true, true},
values={1, 0},
default_value=DKOPTREADER_CONFIG_TEXT_WRAP,
show = true,
draw_index = nil,},
{
name="trim_page",
option_text="Trim Page",
items_text={"auto","manual"},
current_item=nil,
text_dirty=true,
marker_dirty={true, true},
values={1, 0},
default_value=DKOPTREADER_CONFIG_TRIM_PAGE,
show = true,
draw_index = nil,},
{
name="detect_indent",
option_text="Indentation",
items_text={"enable","disable"},
current_item=nil,
text_dirty=true,
marker_dirty={true, true},
values={1, 0},
default_value=DKOPTREADER_CONFIG_DETECT_INDENT,
show = false,
draw_index = nil,},
{
name="defect_size",
option_text="Defect Size",
items_text={"small","medium","large"},
current_item=nil,
text_dirty=true,
marker_dirty={true, true, true},
values={0.5, 1.0, 2.0},
default_value=DKOPTREADER_CONFIG_DEFECT_SIZE,
show = true,
draw_index = nil,},
{
name="page_margin",
option_text="Page Margin",
items_text={"small","medium","large"},
current_item=nil,
text_dirty=true,
marker_dirty={true, true, true},
values={0.02, 0.06, 0.10},
default_value=DKOPTREADER_CONFIG_PAGE_MARGIN,
show = true,
draw_index = nil,},
{
name="line_spacing",
option_text="Line Spacing",
items_text={"small","medium","large"},
current_item=nil,
text_dirty=true,
marker_dirty={true, true, true},
values={1.0, 1.2, 1.4},
default_value=DKOPTREADER_CONFIG_LINE_SPACING,
show = true,
draw_index = nil,},
{
name="word_spacing",
option_text="Word Spacing",
items_text={"small","medium","large"},
current_item=nil,
text_dirty=true,
marker_dirty={true, true, true},
values={0.05, 0.15, 0.375},
default_value=DKOPTREADER_CONFIG_WORD_SAPCING,
show = true,
draw_index = nil,},
{
name="multi_threads",
option_text="Multi Threads",
items_text={"on","off"},
current_item=nil,
text_dirty=true,
marker_dirty={true, true},
values={1, 0},
default_value=DKOPTREADER_CONFIG_MULTI_THREADS,
show = true,
draw_index = nil,},
{
name="quality",
option_text="Render Quality",
items_text={"low","medium","high"},
current_item=nil,
text_dirty=true,
marker_dirty={true, true, true},
values={0.5, 0.8, 1.0},
default_value=DKOPTREADER_CONFIG_RENDER_QUALITY,
show = true,
draw_index = nil,},
{
name="auto_straighten",
option_text="Auto Straighten",
items_text={"0","5","10"},
current_item=nil,
text_dirty=true,
marker_dirty={true, true, true},
values={0, 5, 10},
default_value=DKOPTREADER_CONFIG_AUTO_STRAIGHTEN,
show = true,
draw_index = nil,},
{
name="justification",
option_text="Justification",
items_text={"auto","left","center","right","full"},
current_item=nil,
text_dirty=true,
marker_dirty={true, true, true, true, true},
values={-1,0,1,2,3},
default_value=DKOPTREADER_CONFIG_JUSTIFICATION,
show = true,
draw_index = nil,},
{
name="max_columns",
option_text="Columns",
items_text={"1","2","3","4"},
current_item=nil,
text_dirty=true,
marker_dirty={true, true, true, true},
values={1,2,3,4},
default_value=DKOPTREADER_CONFIG_MAX_COLUMNS,
show = true,
draw_index = nil,},
{
name="contrast",
option_text="Contrast",
items_text={"lightest","lighter","default","darker","darkest"},
current_item=nil,
text_dirty=true,
marker_dirty={true, true, true, true, true},
values={2.0, 1.5, 1.0, 0.5, 0.2},
default_value=DKOPTREADER_CONFIG_CONTRAST,
show = true,
draw_index = nil,},
{
name="screen_rotation",
option_text="Screen Rotation",
items_text={"0","90","180","270"},
current_item=nil,
text_dirty=true,
marker_dirty={true, true, true, true},
values={0, 90, 180, 270},
default_value=DKOPTREADER_CONFIG_SCREEN_ROTATION,
show = true,
draw_index = nil,},
}
-- Any document processed by K2pdfopt is called a koptdocument
KoptDocument = Document:new{
_document = false,
@ -12,6 +181,7 @@ KoptDocument = Document:new{
dc_null = DrawContext.new(),
screen_size = Screen:getSize(),
screen_dpi = Device:getModel() == "KindlePaperWhite" and 212 or 167,
options = KOPTOptions,
configurable = {
font_size = 1.0,
page_margin = 0.06,
@ -28,7 +198,7 @@ KoptDocument = Document:new{
max_columns = 2,
contrast = 1.0,
screen_rotation = 0,
}
},
}
function KoptDocument:init()
@ -42,6 +212,7 @@ function KoptDocument:init()
end
self.is_open = true
self.info.has_pages = true
self.info.configurable = true
if self._document:needsPassword() then
self.is_locked = true
else
@ -62,6 +233,7 @@ function KoptDocument:init()
end
self.is_open = true
self.info.has_pages = true
self.info.configurable = true
self:_readMetadata()
end
end
@ -161,7 +333,7 @@ function KoptDocument:getPageDimensions(pageno, zoom, rotation)
Cache:insert(hash, CacheItem:new{ kctx = kc })
return page_size
end
DEBUG("Found cached koptcontex on page", pageno, cached)
--DEBUG("Found cached koptcontex on page", pageno, cached)
local fullwidth, fullheight = cached.kctx:getPageDim()
local page_size = Geom:new{ w = fullwidth, h = fullheight }
return page_size

@ -0,0 +1,213 @@
require "ui/widget"
require "ui/focusmanager"
require "ui/infomessage"
require "ui/font"
ConfigMenuItem = InputContainer:new{
dimen = nil,
}
function ConfigMenuItem:init()
-- we need this table per-instance, so we declare it here
if Device:isTouchDevice() then
self.ges_events = {
TapSelect = {
GestureRange:new{
ges = "tap",
range = self.dimen,
},
doc = "Select Menu Item",
},
}
else
self.active_key_events = {
Select = { {"Press"}, doc = "chose selected item" },
}
end
end
function ConfigMenuItem:onFocus()
self[1].inverse = true
self.key_events = self.active_key_events
return true
end
function ConfigMenuItem:onUnfocus()
self[1].inverse = false
self.key_events = { }
return true
end
function ConfigMenuItem:onTapSelect()
self.config:onShowDialog(self.dialog)
return true
end
MenuItemDialog = FocusManager:new{
dimen = nil,
menu_item = nil,
title = nil,
is_borderless = false,
}
--[[
Widget that displays config menu
--]]
ConfigDialog = FocusManager:new{
-- set this to true to not paint as popup menu
is_borderless = false,
}
function ConfigDialog:init()
self.menu_dimen = self.dimen:copy()
-----------------------------------
-- start to set up widget layout --
-----------------------------------
self.screen_rotate_options = HorizontalGroup:new{
}
self.screen_rotate_icon = ImageWidget:new{
file = "resources/icons/appbar.transform.rotate.right.large.png"
}
self.screen_rotate_dialog = FrameContainer:new{
dimen = self.screen_rotate_options:getSize(),
background = 0,
bordersize = 0,
padding = 0,
margin = 0,
self.screen_rotate_options,
}
self.page_crop_icon = ImageWidget:new{
file = "resources/icons/appbar.crop.large.png"
}
self.page_layout_icon = ImageWidget:new{
file = "resources/icons/appbar.column.two.large.png"
}
self.text_font_icon = ImageWidget:new{
file = "resources/icons/appbar.text.size.large.png"
}
self.contrast_icon = ImageWidget:new{
file = "resources/icons/appbar.grade.b.large.png"
}
self.more_options_icon = ImageWidget:new{
file = "resources/icons/appbar.settings.large.png"
}
self.icon_spacing = HorizontalSpan:new{
width = (Screen:getWidth() - 64*6 - 20) / 7
}
self.icon_dimen = Geom:new{
w = 64,
h = 64, -- hardcoded for now
}
-- group for config layout
local config_dialog = VerticalGroup:new{
align = "center",
HorizontalGroup:new{
align = "center",
MenuItemDialog:new{
self.screen_rotate_dialog,
dimen = self.screen_rotate_dialog:getSize(),
title = "Screen Rotation",
},
},
HorizontalGroup:new{
align = "center",
self.icon_spacing,
ConfigMenuItem:new{
self.screen_rotate_icon,
dimen = self.icon_dimen:new(),
config = self,
},
self.icon_spacing,
ConfigMenuItem:new{
self.page_crop_icon,
dimen = self.icon_dimen:new(),
dialog = "Crop dialog",
config = self,
},
self.icon_spacing,
ConfigMenuItem:new{
self.page_layout_icon,
dimen = self.icon_dimen:new(),
config = self,
},
self.icon_spacing,
ConfigMenuItem:new{
self.text_font_icon,
dimen = self.icon_dimen:new(),
config = self,
},
self.icon_spacing,
ConfigMenuItem:new{
self.contrast_icon,
dimen = self.icon_dimen:new(),
config = self,
},
self.icon_spacing,
ConfigMenuItem:new{
self.more_options_icon,
dimen = self.icon_dimen:new(),
config = self,
},
self.icon_spacing,
}
}
-- maintain reference to content so we can change it later
self.config_dialog = config_dialog
self[1] = BottomContainer:new{
dimen = Screen:getSize(),
FrameContainer:new{
dimen = config_dialog:getSize(),
background = 0,
config_dialog
}
}
------------------------------------------
-- start to set up input event callback --
------------------------------------------
if Device:isTouchDevice() then
self.ges_events.TapCloseMenu = {
GestureRange:new{
ges = "tap",
range = Geom:new{
x = 0, y = 0,
w = Screen:getWidth(),
h = Screen:getHeight(),
}
}
}
else
-- set up keyboard events
self.key_events.Close = { {"Back"}, doc = "close config menu" }
-- we won't catch presses to "Right"
self.key_events.FocusRight = nil
end
self.key_events.Select = { {"Press"}, doc = "select current menu item"}
UIManager.repaint_all = true
end
function ConfigDialog:onShowDialog(dialog)
DEBUG("Showing dialog of item", dialog)
UIManager:show(dialog)
return true
end
function ConfigDialog:onCloseMenu()
UIManager:close(self)
if self.close_callback then
self.close_callback()
end
return true
end
function ConfigDialog:onTapCloseMenu(arg, ges_ev)
if ges_ev.pos:notIntersectWith(self.menu_dimen) then
self:onCloseMenu()
return true
end
end

@ -0,0 +1,66 @@
require "ui/config"
ReaderConfig = InputContainer:new{
dimen = Geom:new{
x = 0,
y = 7*Screen:getHeight()/8,
w = Screen:getWidth(),
h = Screen:getHeight()/8,
}
}
function ReaderConfig:init()
DEBUG("init ReaderConfig.")
if Device:isTouchDevice() then
self.ges_events = {
TapShowConfigMenu = {
GestureRange:new{
ges = "tap",
range = self.dimen:copy(),
}
}
}
else
self.key_events = {
ShowConfigMenu = { { "AA" }, doc = "show config dialog" },
}
end
end
function ReaderConfig:onShowConfigMenu()
local config_dialog = ConfigDialog:new{
configurable = self.configurable,
options = self.options,
dimen = self.dimen:copy(),
}
function config_dialog:onConfigChoice(item)
if item.callback then
item.callback()
end
end
local dialog_container = CenterContainer:new{
config_dialog,
dimen = self.dimen:copy(),
}
config_dialog.close_callback = function ()
UIManager:close(menu_container)
end
-- maintain a reference to menu_container
self.dialog_container = dialog_container
UIManager:show(config_dialog)
return true
end
function ReaderConfig:onTapShowConfigMenu()
self:onShowConfigMenu()
return true
end
function ReaderConfig:onSetDimensions(dimen)
-- update gesture listenning range according to new screen orientation
self:init()
end

@ -15,7 +15,7 @@ function ReaderMenu:init()
range = Geom:new{
x = 0, y = 0,
w = Screen:getWidth(),
h = Screen:getHeight()/2
h = Screen:getHeight()/4,
}
}
},

@ -14,10 +14,10 @@ function ReaderPaging:init()
GestureRange:new{
ges = "tap",
range = Geom:new{
x = Screen:getWidth()/2,
y = Screen:getHeight()/2,
w = Screen:getWidth(),
h = Screen:getHeight()
x = Screen:getWidth()/4,
y = Screen:getHeight()/4,
w = 3*Screen:getWidth()/4,
h = 5*Screen:getHeight()/8,
}
}
},
@ -26,9 +26,9 @@ function ReaderPaging:init()
ges = "tap",
range = Geom:new{
x = 0,
y = Screen:getHeight()/2,
w = Screen:getWidth()/2,
h = Screen:getHeight()/2,
y = Screen:getHeight()/4,
w = Screen:getWidth()/4,
h = 5*Screen:getHeight()/8,
}
}
}

@ -8,6 +8,7 @@ require "ui/reader/readerrolling"
require "ui/reader/readertoc"
require "ui/reader/readerfont"
require "ui/reader/readermenu"
require "ui/reader/readerconfig"
--[[
This is an abstraction for a reader interface
@ -113,6 +114,17 @@ function ReaderUI:init()
}
table.insert(self, font_menu)
end
if self.document.info.configurable then
-- configurable controller
local config_dialog = ReaderConfig:new{
configurable = self.document.configurable,
options = self.document.options,
dialog = self.dialog,
view = self[1],
ui = self
}
table.insert(self, config_dialog)
end
--DEBUG(self.doc_settings)
-- we only read settings after all the widgets are initialized
self:handleEvent(Event:new("ReadSettings", self.doc_settings))

@ -113,7 +113,21 @@ function WidgetContainer:free()
end
end
--[[
BottomContainer contains its content (1 widget) at the bottom of its own dimensions
]]
BottomContainer = WidgetContainer:new()
function BottomContainer:paintTo(bb, x, y)
local contentSize = self[1]:getSize()
if contentSize.w > self.dimen.w or contentSize.h > self.dimen.h then
-- throw error? paint to scrap buffer and blit partially?
-- for now, we ignore this
end
self[1]:paintTo(bb,
x + (self.dimen.w - contentSize.w)/2,
y + (self.dimen.h - contentSize.h))
end
--[[
CenterContainer centers its content (1 widget) within its own dimensions
@ -326,6 +340,7 @@ end
ImageWidget shows an image from a file
]]
ImageWidget = Widget:new{
invert = nil,
file = nil,
_bb = nil
}
@ -349,6 +364,9 @@ end
function ImageWidget:paintTo(bb, x, y)
local size = self:getSize()
bb:blitFrom(self._bb, x, y, 0, 0, size.w, size.h)
if self.invert then
bb:invertRect(x, y, size.w, size.h)
end
end
function ImageWidget:free()
@ -635,8 +653,8 @@ end
function InputContainer:onGesture(ev)
for name, gsseq in pairs(self.ges_events) do
for _, gs_range in ipairs(gsseq) do
--DEBUG("gs_range", gs_range)
if gs_range:match(ev) then
--DEBUG(gs_range)
local eventname = gsseq.event or name
return self:handleEvent(Event:new(eventname, gsseq.args, ev))
end

Binary file not shown.

After

Width:  |  Height:  |  Size: 433 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 422 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 565 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 909 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 992 B

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="appbar_checkmark_thick_unchecked" Width="48" Height="48" Clip="F1 M 0,0L 48,0L 48,48L 0,48L 0,0" UseLayoutRounding="False">
<Path Width="18" Height="18" Canvas.Left="15" Canvas.Top="15" Stretch="Fill" Fill="#FF000000" Data="F1 M 15,15L 33,15L 33,33L 15,33L 15,15 Z M 18,18L 18,30L 30,30L 30,18L 18,18 Z "/>
</Canvas>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="appbar_checkmark_thick" Width="48" Height="48" Clip="F1 M 0,0L 48,0L 48,48L 0,48L 0,0" UseLayoutRounding="False">
<Path Width="21.5501" Height="18.5001" Canvas.Left="14" Canvas.Top="15.4999" Stretch="Fill" Fill="#FF000000" Data="F1 M 20.35,21.15L 24.75,25.2999L 33.4501,15.4999L 35.5501,17.3499L 25,30L 18.25,23.25L 20.35,21.15 Z M 14,16L 31.25,16L 28.75,19L 17,19L 17,31L 29,31L 29,26.8235L 32,23.25L 32,34L 14,34L 14,16 Z "/>
</Canvas>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="appbar_chevron_left" Width="48" Height="48" Clip="F1 M 0,0L 48,0L 48,48L 0,48L 0,0" UseLayoutRounding="False">
<Path Width="16" Height="18" Canvas.Left="15.9063" Canvas.Top="14.75" Stretch="Fill" Fill="#FF000000" Data="F1 M 22.6563,23.75L 24.6563,25.75L 31.9063,32.75L 25.4063,32.75L 15.9063,23.75L 25.4063,14.75L 31.9063,14.75L 24.6563,21.75L 22.6563,23.75 Z "/>
</Canvas>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="appbar_chevron_right" Width="48" Height="48" Clip="F1 M 0,0L 48,0L 48,48L 0,48L 0,0" UseLayoutRounding="False">
<Path Width="16" Height="18" Canvas.Left="15.9063" Canvas.Top="14.75" Stretch="Fill" Fill="#FF000000" Data="F1 M 25.1563,23.75L 23.1563,21.75L 15.9063,14.75L 22.4063,14.75L 31.9063,23.75L 22.4063,32.75L 15.9063,32.75L 23.1563,25.75L 25.1563,23.75 Z "/>
</Canvas>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="appbar_column_one" Width="48" Height="48" Clip="F1 M 0,0L 48,0L 48,48L 0,48L 0,0" UseLayoutRounding="False">
<Path Width="24" Height="22" Canvas.Left="12" Canvas.Top="13" Stretch="Fill" Fill="#FF000000" Data="F1 M 12,13L 36,13L 36,15L 12,15L 12,13 Z M 12,17.0001L 36,17L 36,19L 12,19.0001L 12,17.0001 Z M 12,21L 36,21L 36,23L 12,23L 12,21 Z M 12,25L 36,25L 36,27L 12,27L 12,25 Z M 12,29L 36,29L 36,31L 12,31L 12,29 Z M 12,33L 36,33L 36,35L 12,35L 12,33 Z "/>
</Canvas>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="appbar_column_three" Width="48" Height="48" Clip="F1 M 0,0L 48,0L 48,48L 0,48L 0,0" UseLayoutRounding="False">
<Path Width="24" Height="22" Canvas.Left="12" Canvas.Top="13" Stretch="Fill" Fill="#FF000000" Data="F1 M 12,13L 19,13L 19,15L 12,15L 12,13 Z M 20.9999,13.0001L 27,13.0001L 27,15.0001L 20.9999,15.0001L 20.9999,13.0001 Z M 36,13L 36,15L 29,15L 29,13L 36,13 Z M 12,17L 18.9999,17.0001L 18.9999,19.0001L 12,19L 12,17 Z M 20.9999,17.0001L 27,17.0001L 27,19.0001L 20.9999,19.0001L 20.9999,17.0001 Z M 36,17L 36,19L 29,19L 29,17L 36,17 Z M 12,21L 18.9999,21.0001L 18.9999,23.0001L 12,23L 12,21 Z M 20.9999,21.0001L 27,21L 27,23L 20.9999,23.0001L 20.9999,21.0001 Z M 36,21L 36,23L 29,23L 29,21L 36,21 Z M 12,25L 19,25.0001L 19,27L 12,27L 12,25 Z M 20.9999,25.0001L 27,25L 27,27L 20.9999,27L 20.9999,25.0001 Z M 36,25L 36,27L 29,27L 29,25L 36,25 Z M 12,29L 19,29L 19,31L 12,31L 12,29 Z M 21,29L 27,29L 27,31L 21,31L 21,29 Z M 36,29L 36,31L 29,31L 29,29L 36,29 Z M 12,33L 19,33L 19,35L 12,35L 12,33 Z M 21,33L 27,33L 27,35L 21,35L 21,33 Z M 36,33L 36,35L 29,35L 29,33L 36,33 Z "/>
</Canvas>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="appbar_column_two" Width="48" Height="48" Clip="F1 M 0,0L 48,0L 48,48L 0,48L 0,0" UseLayoutRounding="False">
<Path Width="24" Height="22" Canvas.Left="12" Canvas.Top="13" Stretch="Fill" Fill="#FF000000" Data="F1 M 12,13L 23,13L 23,15L 12,15L 12,13 Z M 25,13L 36,13L 36,15L 25,15L 25,13 Z M 12,17L 23,17L 23,19L 12,19L 12,17 Z M 25,17L 36,17L 36,19L 25,19L 25,17 Z M 12,21L 23,21L 23,23L 12,23L 12,21 Z M 25,21L 36,21L 36,23L 25,23L 25,21 Z M 12,25L 23,25L 23,27L 12,27L 12,25 Z M 25,25L 36,25L 36,27L 25,27L 25,25 Z M 12,29L 23,29L 23,31L 12,31L 12,29 Z M 25,29L 36,29L 36,31L 25,31L 25,29 Z M 12,33L 23,33L 23,35L 12,35L 12,33 Z M 25,33L 36,33L 36,35L 25,35L 25,33 Z "/>
</Canvas>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="appbar_crop" Width="48" Height="48" Clip="F1 M 0,0L 48,0L 48,48L 0,48L 0,0" UseLayoutRounding="False">
<Path Width="25" Height="25" Canvas.Left="11" Canvas.Top="12" Stretch="Fill" Fill="#FF000000" Data="F1 M 11,34L 11,31L 14,31L 14,18L 11,18L 11,15L 14,15L 14,12L 17,12L 17,15L 30.75,15L 33.75,12L 36,14.25L 33,17.25L 33,31L 36,31L 36,34L 33,34L 33,37L 30,37L 30,34L 17,34L 17,37L 14,37L 14,34L 11,34 Z M 19.25,31L 30,31L 30,20.25L 19.25,31 Z M 17,28.75L 27.75,18L 17,18L 17,28.75 Z "/>
</Canvas>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="appbar_grade_b" Width="48" Height="48" Clip="F1 M 0,0L 48,0L 48,48L 0,48L 0,0" UseLayoutRounding="False">
<Path Width="15.5467" Height="20.5333" Canvas.Left="17.21" Canvas.Top="13.4667" Stretch="Fill" Fill="#FF000000" Data="F1 M 17.21,34L 17.21,13.4667L 24.7175,13.4667C 27.0183,13.4667 28.7867,13.8853 30.0227,14.7225C 31.2587,15.5597 31.8767,16.7392 31.8767,18.2608C 31.8767,19.3639 31.5008,20.3287 30.7492,21.1552C 29.9975,21.9817 29.0365,22.5569 27.8662,22.8808L 27.8662,22.9404C 29.3512,23.1207 30.5376,23.6608 31.4252,24.5606C 32.3128,25.4605 32.7567,26.5567 32.7567,27.8492C 32.7567,29.7375 32.0783,31.2347 30.7217,32.3408C 29.365,33.4469 27.5118,34 25.1621,34L 17.21,34 Z M 21.9033,16.9867L 21.9033,21.68L 23.8879,21.68C 24.8199,21.68 25.5532,21.4569 26.0879,21.0108C 26.6226,20.5647 26.89,19.9506 26.89,19.1683C 26.89,17.7139 25.7915,16.9867 23.5946,16.9867L 21.9033,16.9867 Z M 21.9033,25.2L 21.9033,30.48L 24.3829,30.48C 25.4401,30.48 26.269,30.2378 26.8694,29.7535C 27.4698,29.2692 27.77,28.6085 27.77,27.7712C 27.77,26.9707 27.4751,26.342 26.8854,25.8852C 26.2957,25.4284 25.4707,25.2 24.4104,25.2L 21.9033,25.2 Z "/>
</Canvas>

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="appbar_settings" Width="48" Height="48" Clip="F1 M 0,0L 48,0L 48,48L 0,48L 0,0" UseLayoutRounding="False">
<Ellipse Width="4" Height="4" Canvas.Left="22" Canvas.Top="22" Stretch="Fill" Fill="#FF000000"/>
<Path Width="19.6504" Height="19.6504" Canvas.Left="14.1748" Canvas.Top="14.1748" Stretch="Fill" Fill="#FF000000" Data="F1 M 24.69,17.5542L 27.9094,14.793C 28.5138,15.05 29.0876,15.3647 29.6241,15.7302L 29.0458,19.93L 33.2747,20.2541C 33.5166,20.8524 33.7023,21.4794 33.8252,22.1286L 30.4458,24.69L 33.207,27.9094C 32.95,28.5137 32.6353,29.0876 32.2698,29.6241L 28.07,29.0458L 27.7459,33.2747C 27.1476,33.5166 26.5206,33.7023 25.8714,33.8252L 23.3099,30.4458L 20.0906,33.207C 19.4862,32.95 18.9124,32.6353 18.3759,32.2698L 18.9542,28.0699L 14.7253,27.7459C 14.4834,27.1476 14.2977,26.5206 14.1748,25.8713L 17.5542,23.3099L 14.793,20.0906C 15.05,19.4862 15.3647,18.9124 15.7302,18.3759L 19.93,18.9542L 20.2541,14.7252C 20.8524,14.4834 21.4794,14.2977 22.1286,14.1748L 24.69,17.5542 Z M 24,20C 21.7909,20 20,21.7909 20,24C 20,26.2091 21.7909,28 24,28C 26.2091,28 28,26.2091 28,24C 28,21.7909 26.2091,20 24,20 Z "/>
</Canvas>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="appbar_text_size" Width="48" Height="48" Clip="F1 M 0,0L 48,0L 48,48L 0,48L 0,0" UseLayoutRounding="False">
<Path Width="29.1208" Height="19.6217" Canvas.Left="9.6325" Canvas.Top="13.365" Stretch="Fill" Fill="#FF000000" Data="F1 M 21.3435,27.7017L 15.6646,27.7017L 14.2522,32.9817L 9.6325,32.9817L 15.6646,13.365L 21.5495,13.365L 26.6484,29.5554L 29.9803,18.72L 34.2602,18.72L 38.7533,32.9867L 35.2232,32.9867L 34.1104,29.1467L 29.9803,29.1467L 28.9531,32.9867L 22.8736,32.9817L 21.3435,27.7017 Z M 16.3119,24.5117L 20.6962,24.5117L 19.4603,20.3436L 18.938,18.4491L 18.4599,16.555L 18.401,16.555L 17.956,18.4662L 17.4889,20.3929L 16.3119,24.5117 Z M 30.4511,26.8267L 33.6396,26.8267L 32.7408,23.7954L 32.361,22.4175L 32.0133,21.04L 31.9705,21.04L 31.6468,22.43L 31.3071,23.8312L 30.4511,26.8267 Z "/>
</Canvas>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="appbar_transform_rotate_right" Width="48" Height="48" Clip="F1 M 0,0L 48,0L 48,48L 0,48L 0,0" UseLayoutRounding="False">
<Path Width="26" Height="25" Canvas.Left="11" Canvas.Top="11" Stretch="Fill" Fill="#FF000000" Data="F1 M 11,13L 24,13L 24,36L 11,36L 11,13 Z M 13,15L 13,34L 22,34L 22,15L 13,15 Z M 26,13C 29.1521,13 31.9945,14.3258 34,16.4501L 34,11L 37,14L 37,22L 29,22L 26,19L 31.5903,19C 30.217,17.4656 28.2212,16.5 26,16.5L 25,16.5661L 25,13.0448L 26,13 Z M 25,36L 25,34L 28,34L 28,36L 25,36 Z M 33,34L 33,36L 30,36L 30,34L 33,34 Z M 35,33L 37,33L 37,36L 35,36L 35,33 Z M 35,28L 37,28L 37,31L 35,31L 35,28 Z M 35,23L 37,23L 37,26L 35,26L 35,23 Z M 30,25L 30,23L 33,23L 33,25L 30,25 Z M 25,25L 25,23L 28,23L 28,25L 25,25 Z "/>
</Canvas>

@ -0,0 +1,44 @@
Read the license:
http://creativecommons.org/licenses/by/3.0/ *
Basicaly, use it anyway you want but include this license file in the source if your project is open source. Nothing is needed in the front facing project (UNLESS you are using any of the icons listed below). Commercial use is not only allowed but encouraged. This pack was made to promote consistency in applications.
Creator
- Austin Andrews (@templarian)
Contributor**
- Oren Nachman
- appbar.chevron.down
- appbar.chevron.up
- appbar.chevron.left
- appbar.chevron.right
Attribution***
- Kris Vandermotten (@kvandermotten)
- appbar.medical.pulse
- Constantin Kichinsky (@kichinsky)
- appbar.currency.rubles
- appbar.currency.grivna
- Massimo Savazzi (@msavazzi)
- List of missing exported icons
- Proletkult Graphik, from The Noun Project
- appbar.draw.pen (inspired)
- Olivier Guin, from The Noun Project
- appbar.draw.marker
- Gibran Bisio, from The Noun Project
- appbar.draw.bucket
Andrew Forrester, from The Noun Project
- appbar.fingerprint
** Developers and designers that emailed Templarian the source .design icons to be added into the package. PNGs also accepted, but may take longer to be added.
*** Icons I've copied so closely you want to attribute them and are also under the CC license.
Contact
- http://templarian.com/
- admin[@]templarian[.]com
* Does not apply to copyrighted logos
- Skype
- Facebook
- Twitter
- etc...
Loading…
Cancel
Save